NLTK 词形还原错误结果

NLTK lemmatization wrong result

我使用 NLTK 并得到了这样的错误结果:

>>> print lmtzr.lemmatize('coding', 'v')
cod

我认为答案是 "code" 而不是一条鱼。 有没有办法解决这个问题或其他 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

请注意,以单个下划线开头的属性被认为是私有的——即它们不是 public 接口的一部分。所以像上面那样修改 wordnet._exception_map 不能保证在未来的 nltk 版本中工作。 (以上适用于 NLTK 版本 3.0.0。它是通过查看 WordNetLemmatizer.lemmatize and 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