从字符串中获取所有可能的英文单词

从字符串中获取所有可能的英文单词

问题描述:

从python中的给定字符串生成所有可能的英文单词组合。从字符串中获取所有可能的英文单词

输入:GoDaddy的 输出:去吧,神,爸爸,加,爸爸

任何好的库?

+0

在我看来,你想使用*特里*(不要与*树*混淆)。 –

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 
>>> "*" in vocab 
False 

>>> import enchant 
>>> d = enchant.Dict("en_US") 
>>> d.check('*') 
False 
>>> d.check('*') 
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

首先,得到一组所有英文单词。我期望有很多库可以做到这一点,但是对于软件库的建议与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

执行时间很大。 –

您可以使用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

好的。谢谢。 –