我使用了 NLTK 并得到了这样的错误结果:
>>> print lmtzr.lemmatize('coding', 'v')
cod
我认为答案是“代码”而不是鱼。有没有办法解决这个问题或其他 python Lib 可以做得更好?
我使用了 NLTK 并得到了这样的错误结果:
>>> print lmtzr.lemmatize('coding', 'v')
cod
我认为答案是“代码”而不是鱼。有没有办法解决这个问题或其他 python Lib 可以做得更好?
解决此问题的一种方法是将单词添加'coding'
到wordnet._exception_map
:
import nltk.stem as stem
import nltk.corpus as corpus
wordnet = corpus.wordnet
wordnet._exception_map['v']['coding'] = ['code']
wnl = stem.WordNetLemmatizer()
print(wnl.lemmatize('coding', 'v'))
# code
请注意,以下划线开头的属性被认为是私有的——即它们不是公共接口的一部分。因此wordnet._exception_map
,不能保证在未来版本的 nltk 中进行上述修改。(以上适用于 NLTK 版本 3.0.0。它是通过查看和的源代码找到的WordNetLemmatizer.lemmatize
。wordnet._morphy
)
解决问题的另一种方法是修改nltk_data/corpora/wordnet/verb.exc
. 该文件的内容如下所示:
cockneyfied cockneyfy
codded cod
codding cod
codified codify
cogged cog
cogging cog
如果你添加
coding code
然后这个异常会wordnet._exception_map
自动为你添加。
第三种选择,比前两种更简单,是说服 Wordnet 的开发人员添加coding code
到nltk_data/copora/wordnet/verb.exc
.