我已經使用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