gpt4 book ai didi

nltk - 用 wordnet lemmatizer 阻止一些复数不起作用

转载 作者:行者123 更新时间:2023-12-05 01:47:40 24 4
gpt4 key购买 nike

您好,我对 nltk (2.0.4) 有疑问:我试图阻止“男人”或“ dentry ”这个词,但它似乎不起作用。这是我的代码:

############################################################################
import nltk
from nltk.corpus import wordnet as wn
from nltk.stem.wordnet import WordNetLemmatizer

lmtzr=WordNetLemmatizer()
words_raw = "men teeth"
words = nltk.word_tokenize(words_raw)
for word in words:
print 'WordNet Lemmatizer NOUN: ' + lmtzr.lemmatize(word, wn.NOUN)
#############################################################################

本应打印“man”和“tooth”,但它打印的是“men”和“teeth”。

有什么解决办法吗?

最佳答案

我找到了解决方案!我检查了 wordnet.py 文件夹/usr/local/lib/python2.6/dist-packages/nltk/corpus/reader 中的文件,我注意到函数 _morphy(self,form,pos) 返回一个包含词干词的列表.所以我尝试测试 _morphy :

import nltk
from nltk.corpus import wordnet as wn
from nltk.stem.wordnet import WordNetLemmatizer

words_raw = "men teeth books"
words = nltk.word_tokenize(words_raw)
for word in words:
print wn._morphy(word, wn.NOUN)

这个程序打印 [men,man]、[teeth,tooth] 和 [book]!

为什么 lmtzr.lemmatize () 只打印列表的第一个元素的解释,也许可以在函数 lemmatize 中找到,它包含在文件夹/usr/local/中的文件 'wordnet.py' 中lib/python2.6/dist-packages/nltk/stem.

def lemmatize(self, word, pos=NOUN):
lemmas = wordnet._morphy(word, pos)
return min(lemmas, key=len) if lemmas else word

我假设它只返回单词列表中包含的较短的单词,如果两个单词的长度相等,则返回第一个;例如 'men' 或 'teeth' 而不是 'man' 和 'tooth'

关于nltk - 用 wordnet lemmatizer 阻止一些复数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22333392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com