Hier ist eine dynamische Programmierlösung (implementiert als memoized-Funktion) zu lösen.Wenn ein Wörterverzeichnis mit ihren Häufigkeiten gegeben wird, teilt es den Eingabetext an den Positionen auf, die die wahrscheinlichste Phrase ergeben. Sie müssen eine echte Wortliste finden, aber ich habe einige erfundene Frequenzen für einen einfachen Test aufgenommen.
WORD_FREQUENCIES = {
'file': 0.00123,
'files': 0.00124,
'save': 0.002,
'ave': 0.00001,
'as': 0.00555
}
def split_text(text, word_frequencies, cache):
if text in cache:
return cache[text]
if not text:
return 1, []
best_freq, best_split = 0, []
for i in xrange(1, len(text) + 1):
word, remainder = text[:i], text[i:]
freq = word_frequencies.get(word, None)
if freq:
remainder_freq, remainder = split_text(
remainder, word_frequencies, cache)
freq *= remainder_freq
if freq > best_freq:
best_freq = freq
best_split = [word] + remainder
cache[text] = (best_freq, best_split)
return cache[text]
print split_text('filesaveas', WORD_FREQUENCIES, {})
--> (1.3653e-08, ['file', 'save', 'as'])
Ich habe keine Erfahrung in diesem Bereich, aber vielleicht möchten Sie mit einem Blick auf das Natural Language Toolkit beginnen. http://www.nltk.org/ –
Und FileSaveAs konnte * Dateien ave als * nicht nur * Datei Speichern unter * aufgeteilt werden hart Es wäre nur auf Wort Möglichkeiten zu teilen, wenn Sie einen Fachwortschatz haben. .. – Sparky
Und ["c", "dim", "Alter"], ["cd", "ich", "Magier"], etc ... es ist nicht einfach, das richtig zu verstehen, ohne den Kontext zu kennen. Es wird noch schwieriger, die richtige Option auszuwählen, wenn es viele domänenspezifische Begriffe und Abkürzungen gibt, die im normalen Text selten sind, aber in den typischen erwarteten Eingaben üblich sind. Sie müssten wahrscheinlich den Algorithmus trainieren. –