如何使用nltk找出英语中是否存在单词

时间:2015-03-17 12:54:33

标签: python python-3.x nlp nltk wordnet

我正在寻找这个问题的正确解决方案。之前已经多次询问过这个问题,我没有找到适合的单一答案。 我需要在NLTK中使用语料库来检测单词是否是英语单词

我试过这样做:

wordnet.synsets(word)

对于许多常见词汇而言,这并不是一句话。 使用英语单词列表并在文件中执行查找不是一种选择。 使用附魔也不是一种选择。 如果有另一个库可以执行相同的操作,请提供api的用法。 如果没有,请提供nltk语料库,其中包含所有英语单词。

3 个答案:

答案 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。