2015-10-20 44 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