我使用NLTK并得到错误的结果:
>>> print lmtzr.lemmatize('coding', 'v')
cod
我认为答案是"代码"而不是鱼。 无论如何要解决这个或其他python Lib可以做得更好吗?
答案 0 :(得分:1)
解决此问题的一种方法是将'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
。