这里主要介绍nltk中的一些现成的词干提取器Porter和Lancaster.
1. Porter
>>> import nltk
>>> porter=nltk.PorterStemmer()
>>> raw='''Listen, strange women lying in ponds distributing swords is no basis
... for a system of government. Supreme executive power derives from a mandate from
... the masses, not from some farcical aquatic'''
>>> tokens=nltk.word_tokenize(raw)
>>> [porter.stem(t) for t in tokens]
['listen', ',', u'strang', 'women', u'lie', 'in', u'pond', u'distribut', u'sword', 'is', 'no', u'basi', 'for', 'a', 'system', 'of', u'govern', '.', u'suprem', u'execut', 'power', u'deriv', 'from',
, u'mandat', 'from', 'the', u'mass', ',', 'not', 'from', 'some', u'farcic', u'aquat']
2. Lancaster
>>> lancaster=nltk.LancasterStemmer()
>>> [lancaster.stem(t) for t in tokens]
['list', ',', 'strange', 'wom', 'lying', 'in', 'pond', 'distribut', 'sword', 'is', 'no', 'bas', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem', 'execut', 'pow', 'der', 'from', 'a', 'mand', 'from'
, 'the', 'mass', ',', 'not', 'from', 'som', 'farc', 'aqu']
3. 词形归并器:删除词缀产生的词, 常用的有WordNetLemmatier
>>> wnl=nltk.WordNetLemmatizer()
>>> [wnl.lemmatize(t) for t in tokens]
['Listen', ',', 'strange', u'woman', 'lying', 'in', u'pond', 'distributing', u'sword', 'is', 'no', 'basis', 'for', 'a', 'system', 'of', 'government', '.', 'Supreme', 'executive', 'power', 'derives', '
from', 'a', 'mandate', 'from', 'the', u'mass', ',', 'not', 'from', 'some', 'farcical', 'aquatic']
从上面的运行结果可以看出,Porter词干提取器的效果比较好。
4. 基于Porter词干提取算法的词干提取工具SnowballStemmer
>>> from nltk.stem import SnowballStemmer
>>> stemmer=SnowballStemmer('english')
>>> import nltk
>>> raw='''Listen, strange women lying in ponds distributing swords is no basis
... ... for a system of government. Supreme executive power derives from a mandate from
... ... the masses, not from some farcical aquatic'''
>>> tokens=nltk.word_tokenize(raw)
>>> [stemmer.stem(t) for t in tokens]
[u'listen', ',', u'strang', u'women', u'lie', 'in', u'pond', u'distribut', u'sword', 'is', 'no', u'basi', u'...', u'for', 'a', u'system', 'of', u'govern', '.', u'suprem', u'execut', u'power', u'deriv'
, u'from', 'a', u'mandat', u'from', u'...', u'the', u'mass', ',', u'not', u'from', u'some', u'farcic', u'aquat']