2017-04-01 3 views

Antwort

3

Versuchen enchant von http://pythonhosted.org/pyenchant/tutorial.html

>>> from nltk import everygrams 
>>> import enchant 
>>> word = 'godaddy' 
>>> [''.join(_ngram) for _ngram in everygrams(word) if d.check(''.join(_ngram))] 
['g', 'o', 'd', 'a', 'd', 'd', 'y', 'go', 'ad', 'god', 'dad', 'add', 'daddy'] 
>>> d = enchant.Dict("en_US") 
# Exclude single char words. 
>>> [''.join(_ngram) for _ngram in everygrams(word) if d.check(''.join(_ngram)) and len(_ngram) > 1] 
['go', 'ad', 'god', 'dad', 'add', 'daddy'] 

Aber wenn es alle Kombinationen von Strings, unabhängig davon, ob es ein gültiges englischen Wort:

>>> list(everygrams(word)) 

Siehe auch:


Hinweis

seine Einschränkung Jedes Verfahren Wörterbuch Überprüfung würde:

>>> from nltk.corpus import words as english 
>>> vocab = set(w.lower() for w in english.words()) 
>>> "google" in vocab 
False 
>>> "stackoverflow" in vocab 
False 

>>> import enchant 
>>> d = enchant.Dict("en_US") 
>>> d.check('StackOverflow') 
False 
>>> d.check('Stackoverflow') 
False 
>>> d.check('Google') 
True 

Der „prinzipien“ Weg, um diese Aufgabe zu tun ist, Sprachmodellierung auf Zeichenebene zu tun und einige probabilistische Weise die Folge von Zeichen zu prüfen, ob mehr/weniger wahrscheinlich als englische Wörter.

Auch gibt es viele Englishs in der Welt. Ein "gültiges" Wort im britischen Englisch könnte ein unbekanntes Wort im amerikanischen Englisch sein. Siehe http://www.ucl.ac.uk/english-usage/projects/ice.htm und https://en.wikipedia.org/wiki/World_Englishes#Classification_of_Englishes

+0

Was ist mit 'oda',' da' oder 'od'? – Kasramvd

+0

Denke nicht, dass sie gültige "englische" Wörter sind =) – alvas

+0

Ja, das sind sie. Sie sind Abkürzungen. – Kasramvd

0

Zuerst erhalten Sie eine Reihe aller englischen Wörter. Ich erwarte, dass es viele Bibliotheken gibt, die das können, aber Empfehlungen für Softwarebibliotheken sind off-topic für Stack Overflow, verwenden Sie einfach alles, was Sie finden können.

Dann durchlaufen Sie alle Teilzeichenfolgen der Zeichenfolge und sehen Sie, ob sie sich in der Auflistung befinden.

words = #??? 
s = "godaddy" 
for i in range(len(s)): 
    for j in range(i+1, len(s)): 
     substring = s[i:j+1] 
     if substring in words: 
      print(substring) 

Ergebnis:

go 
god 
od 
oda 
da 
dad 
daddy 
ad 
add 
+0

Ausführungszeit ist groß. –

0

können Sie nltk.corpus.words verwenden, um eine Menge aller englischen Wörter zu erstellen, dann die Schnittmenge aller möglichen Wörter finden erzeugt aus dem String mit den englischen Wörtern:

In [56]: all_words = {st[i:j + i] for j in range(2, len(st)) for i in range(len(st)- j + 1)} 

In [57]: english_vocab = set(w.lower() for w in nltk.corpus.words.words()) 

In [58]: english_vocab.intersection(all_words) 
Out[58]: {'ad', 'add', 'addy', 'da', 'dad', 'daddy', 'go', 'god', 'od', 'oda'} 

Beachten Sie, dass die Worte, wie OD oder oda sind gültige Abkürzungen.

+0

Gute Eins. Vielen Dank. –

Verwandte Themen