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
。
我使用 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
。