我正在寻找这个问题的正确解决方案。之前已经多次询问过这个问题,我没有找到适合的单一答案。 我需要在NLTK中使用语料库来检测单词是否是英语单词
我试过这样做:
wordnet.synsets(word)
对于许多常见词汇而言,这并不是一句话。 使用英语单词列表并在文件中执行查找不是一种选择。 使用附魔也不是一种选择。 如果有另一个库可以执行相同的操作,请提供api的用法。 如果没有,请提供nltk语料库,其中包含所有英语单词。
答案 0 :(得分:10)
NLTK includes some corpora只不过是单词列表。 Words Corpus是来自Unix的/ usr / share / dict / words文件,某些拼写检查器使用 。我们可以使用它来查找文本语料库中的异常或拼写错误的单词,如下所示:
def unusual_words(text):
text_vocab = set(w.lower() for w in text.split() if w.isalpha())
english_vocab = set(w.lower() for w in nltk.corpus.words.words())
unusual = text_vocab - english_vocab
return sorted(unusual)
在这种情况下,您可以使用english_vocab
检查您单词的成员。
>>> import nltk
>>> english_vocab = set(w.lower() for w in nltk.corpus.words.words())
>>> 'a' in english_vocab
True
>>> 'this' in english_vocab
True
>>> 'nothing' in english_vocab
True
>>> 'nothingg' in english_vocab
False
>>> 'corpus' in english_vocab
True
>>> 'Terminology'.lower() in english_vocab
True
>>> 'sorted' in english_vocab
True
答案 1 :(得分:2)
我尝试了上述方法,但对于应该存在的许多单词,我尝试了wordnet。我认为这有更全面的职业空缺.-
from nltk.corpus import wordnet
if wordnet.synsets(word):
#Do something
else:
#Do some otherthing
答案 2 :(得分:0)
根据我的经验,发现NTLK有两个选择:
1:
from nltk.corpus import words
unknown_word = []
if token not in words.words():
unknown_word.append(token)
2:
from nltk.corpus import wordnet
unknown_word = []
if len(wordnet.synsets(token)) == 0:
unknown_word.append(token)
选项2的性能更好。选项2中捕获了更多相关的单词。
我建议选择选项2。