NLTK词形错误的结果

时间:2015-10-20 12:08:28

标签: python-2.7 nltk lemmatization

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

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

我认为答案是"代码"而不是鱼。 无论如何要解决这个或其他python Lib可以做得更好吗?

1 个答案:

答案 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.lemmatizewordnet._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