我想编写一个简单的函数,通过NLTK查看WordNet中的这个词是否“存在”。
def is_known(word):
"""return True if this word "exists" in WordNet
(or at least in nltk.corpus.stopwords)."""
if word.lower() in nltk.corpus.stopwords.words('english'):
return True
synset = wn.synsets(word)
if len(synset) == 0:
return False
else:
return True
为什么could, since, without, although
之类的字会返回False?它们不会出现在WordNet中吗?有没有更好的方法来确定WN中是否存在单词(使用NLTK)?
我的第一次尝试是消除像“{1}}这样的单词的”停用词“,但仍然有一些我常见的单词(如to, if, when, then, I, you
)。
答案 0 :(得分:6)
WordNet不包含这些单词或类似单词。有关说明,请参阅WordNet docs:
中的以下内容Q. Why is WordNet missing: of, an, the, and, about, above, because, etc.
A. WordNet only contains "open-class words": nouns, verbs, adjectives, and adverbs. Thus, excluded words include determiners, prepositions, pronouns, conjunctions, and particles.
您也无法在WordNet的在线版本中找到这些单词。
答案 1 :(得分:0)
您可以尝试提取wordnet中的所有引理,然后检查该列表:
from nltk.corpus import wordnet as wn
from itertools import chain
all_lemmas = set(chain(*[i.lemma_names for i in wn.all_synsets()]))
def in_wordnet(word):
return True if word in all_lemmas else False
print in_wordnet('can')
print in_wordnet('could')
<强> [OUT]:强>
True
False
请注意wordnet包含lemmas而不是单词。另请注意,单词/引理可以是多义的,而不是真正的含义词,例如。
I can foo bar.
vs The water can is heavy