我想在Python程序中检查一个单词是否在英语词典中。
我相信nltk wordnet接口可能是可行的,但我不知道如何使用它来完成如此简单的任务。
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
将来,我可能想检查字典中是否有单词的单数形式(例如,properties -> property -> english word)。我该如何做到这一点?
发布于 2010-09-25 00:26:11
为了(更)强大和灵活,可以使用专用的拼写检查库,比如PyEnchant
。有一个tutorial,或者你可以直接进入:
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>> d.suggest("Helo")
['He lo', 'He-lo', 'Hello', 'Helot', 'Help', 'Halo', 'Hell', 'Held', 'Helm', 'Hero', "He'll"]
>>>
PyEnchant
附带了几个字典(en_GB,en_US,de_DE,fr_FR),但是如果你想要更多的语言,可以使用任何OpenOffice ones。
似乎有一个名为inflect
的多元化库,但我不知道它是否有用。
发布于 2014-01-28 16:38:26
因为WordNet并不包含所有的英文单词,所以它在WordNet上不能很好地工作。基于没有附魔的NLTK的另一种可能性是NLTK的单词语料库
>>> from nltk.corpus import words
>>> "would" in words.words()
True
>>> "could" in words.words()
True
>>> "should" in words.words()
True
>>> "I" in words.words()
True
>>> "you" in words.words()
True
发布于 2010-09-25 00:12:00
使用set来存储单词列表,因为查找它们会更快:
with open("english_words.txt") as word_file:
english_words = set(word.strip().lower() for word in word_file)
def is_english_word(word):
return word.lower() in english_words
print is_english_word("ham") # should be true if you have a good english_words.txt
要回答问题的第二部分,复数应该已经在一个很好的单词列表中,但是如果您出于某种原因想要从列表中专门排除这些复数,您确实可以编写一个函数来处理它。但是英语的复数规则非常棘手,所以我一开始就把复数包含在单词列表中。
至于在哪里可以找到英文词表,我只是通过谷歌搜索“英语词表”就找到了几个。这里有一个:http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt,如果你特别想要其中一种方言,你可以在谷歌上搜索英国英语或美国英语。
https://stackoverflow.com/questions/3788870
复制相似问题