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

Posted

技术标签:

【中文标题】如何使用 nltk 找出英语中是不是存在单词【英文标题】:How to find out wether a word exists in english using nltk如何使用 nltk 找出英语中是否存在单词 【发布时间】:2015-05-19 21:54:35 【问题描述】:

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

我已经尝试过:

wordnet.synsets(word)

这不适用于许多常用词。 使用英语单词列表并在文件中执行查找不是一种选择。 使用附魔也不是一种选择。 如果有其他库可以做同样的事情,请提供 api 的用法。 如果没有,请提供一个nltk语料库,其中包含所有英文单词。

【问题讨论】:

【参考方案1】:

NLTK includes some corpora 只不过是词表。单词语料库是来自 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

【讨论】:

您知道更快的方法吗?每次验证都需要很长时间 @NicoCoallier 您是否使用基于set 的方法? 我正在尝试识别英文句子.. ***.com/questions/43922087/… @NicoCoallier 您是否使用过unusual_words 函数,我更新了函数,因为似乎应该拆分text 参数以便对单词而不是字符执行操作:-)。您可以使用更新的版本。 为此干杯,我会试试的!你有想法解决我的帖子吗?【参考方案2】:

我尝试了上述方法,但是对于应该存在的许多单词,所以我尝试了 wordnet。我认为这有更全面的词汇。-

from nltk.corpus import wordnet if wordnet.synsets(word): #Do something else: #Do some otherthing

【讨论】:

【参考方案3】:

根据我的经验,找到了 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。

【讨论】:

对于方法2:wordnet,很多常见的有效词(of、an、the、and、about、above、because等)使用这种方法会被归类为未知,因为“WordNet只包含”open类词“:名词、动词、形容词和副词。因此,排除的词包括限定词、介词、代词、连词和助词。”见wordnet.princeton.edu/frequently-asked-questions

以上是关于如何使用 nltk 找出英语中是不是存在单词的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NLTK 分词器去除标点符号?

NLTK中的Stemmers

使用 Python 从文本中删除非英语单词

如何使用 nltk 或 python 删除停用词

如何通过代码拼写检查将所有未知单词添加到字典中,或者当语言不是英语时忽略它们?

用NLTK/Python生成一串N个随机英文单词