Lemmatization应导致更好的结果比词干(source):
词干通常指的是一种粗略的过程,正确地砍掉字的两端在实现这一目标的最希望的时间,并经常包括删除派生词缀。
词形还原通常是指适当地做事与使用的话词汇和形态分析的,通常旨在仅除去变化词尾并返回一个字,这被称为外稃的基部或字典形式。
词形还原在NTLK支持为nltk.stem包的一部分:
import nltk
l = nltk.stem.WordNetLemmatizer()
l.lemmatize('dogs') # -> 'dog'
l.lemmatize('addition') # -> 'addition'
s = nltk.stem.snowball.EnglishStemmer()
s.stem('dogs') # -> 'dog'
s.stem('addition') # -> 'addit'
如果lemmatizer不承认的话,也不会更改。一个缺陷是,默认情况下所有单词都被认为是名词。要覆盖这种行为,你必须设置pos
的说法,这是默认设置为pos='n'
:
s.stem('better') # -> 'better'
l.lemmatize('better') # -> 'better'
l.lemmatize('better', pos='a') # -> 'good'
你要找的是一个'lemmatizer'而不是词干,也是一个相当强的一个,因为从'addition' =>'add',需要很多知识。我有一个英语形态词形解析器,适用于'verb' +'morpheme' =>'verbs'和'nouns' +'morpheme'成名词。一旦我完成其他工作,我可以在下周发布代码。你急需吗? – alvas 2013-04-05 06:24:49
NLTK中的WordNet lemmatizer接近此,但它需要POS标签才能获得好的结果。尽管如此,它不会执行addition => add。 – 2013-04-05 09:14:17
@ 2er0:那太棒了!非常感谢。下周对我来说会很好。+ 1 – chepukha 2013-04-05 17:00:16