2017-04-01 81 views

回答

3

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'] 

嘗試enchant但如果它是字符串的所有組合,無論它是否是一個有效的英文單詞:

>>> list(everygrams(word)) 

參見:


任何字典檢查方法是有其侷限性:

>>> 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 

的「原則性」的方式做這個任務是做語言建模的人物等級,並有一定概率的方法來檢查的字符序列是否更/不太像英文單詞。

此外,世界上還有很多英語。英式英語中的「有效」單詞可能是美國英語中未知的單詞。見http://www.ucl.ac.uk/english-usage/projects/ice.htmhttps://en.wikipedia.org/wiki/World_Englishes#Classification_of_Englishes

+0

'oda','da'或'od'呢? – Kasramvd

+0

不要以爲他們是有效的「英語」單詞=) – alvas

+0

是的,他們是。它們是縮寫。 – Kasramvd

0

首先,得到一組所有英文單詞。我期望有很多庫可以做到這一點,但是對於軟件庫的建議與Stack Overflow無關,所以只需使用你能找到的任何東西。

然後遍歷字符串的所有子字符串,看看它們中的任何一個是否在集合中。

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) 

結果:

go 
god 
od 
oda 
da 
dad 
daddy 
ad 
add 
+0

執行時間很大。 –

0

您可以使用nltk.corpus.words創建一組的所有英語單詞,然後找到的從你的字符串與英文單詞生成的所有可能的字的交叉點:

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'} 

注意的話像ODoda是有效的縮寫。

+0

好的。謝謝。 –

相關問題