如何使用 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 找出英语中是不是存在单词的主要内容,如果未能解决你的问题,请参考以下文章