2015-10-20 132 views
1

我已经使用NLTK,并得到错误的结果是这样的:NLTK词形还原错误的结果

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

我认为答案是鱼,而不是“代码”。 有没有办法解决这个或其他python Lib可以做得更好的工作?解决这个问题

+0

*或其他python Lib可以做得更好吗?* - NTLK在其领域中最好的库,至少对于Python而言 –

+0

您是否有上下文语句在何处出现?看看这个:http://stackoverflow.com/questions/33157847/lemmatizing-words-after-pos-tagging-produces-unexpected-results/33172447#33172447。在词形化之前可能需要WSD。 – alvas

回答

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 codenltk_data/copora/wordnet/verb.exc

+0

我认为这是'Wordnet'开发者维护资源和NLTK包装和阅读wordnet文件。除非我们说服普林斯顿Wordnet人员修改他们的文件,否则不能做太多事情=( – alvas

+1

@alvas:感谢您的更正和信息。 – unutbu