我已经使用NLTK,并得到错误的结果是这样的:NLTK词形还原错误的结果
>>> print lmtzr.lemmatize('coding', 'v')
cod
我认为答案是鱼,而不是“代码”。 有没有办法解决这个或其他python Lib可以做得更好的工作?解决这个问题
我已经使用NLTK,并得到错误的结果是这样的: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
。
*或其他python Lib可以做得更好吗?* - NTLK在其领域中最好的库,至少对于Python而言 –
您是否有上下文语句在何处出现?看看这个:http://stackoverflow.com/questions/33157847/lemmatizing-words-after-pos-tagging-produces-unexpected-results/33172447#33172447。在词形化之前可能需要WSD。 – alvas