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

时间:2017-04-01 17:33:40

标签: python string nltk

在python中生成给定字符串中所有可能的英语单词组合。

输入:godaddy 输出:go,god,dad,add,daddy

任何好的图书馆?

3 个答案:

答案 0 :(得分:4)

http://pythonhosted.org/pyenchant/tutorial.html

尝试enchant
>>> 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']

但是,如果它是所有字符串的组合,无论它是否是有效的英语单词:

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

"原则"执行此任务的方法是在字符级别进行语言建模,并使用一些概率方法来检查字符序列是否更像/更不可能作为英语单词。

此外,世界上有很多英文版。 A"有效"英式英语中的单词在美式英语中可能是一个未知单词。请参阅http://www.ucl.ac.uk/english-usage/projects/ice.htmhttps://en.wikipedia.org/wiki/World_Englishes#Classification_of_Englishes

答案 1 :(得分: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

答案 2 :(得分: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等字词是有效的缩写。