Stemmers
在英语中,一个单词常常是另一个单词的“变种”,如:happy=>happiness,这里happy叫做happiness的词干(stem)。在信息检索系统中,我们常常做的一件事,就是在Term规范化过程中,提取词干(stemming),即除去英文单词分词变换形式的结尾。
本文主要介绍nltk中Stemmer的用法
Porter Stemmer
应用最为广泛的、中等复杂程度的、基于后缀剥离的词干提取算法是波特词干算法,也叫波特词干器(Porter Stemmer)。
1 | from nltk.stem.porter import * |
Snowball stemmer
雪球词干算法(不知道该怎么翻译=.=)支持多种语言1
2
3
4from nltk.stem.snowball import SnowballStemmer
" ".join(SnowballStemmer.languages)) print(
danish dutch english finnish french german hungarian italian
norwegian porter portuguese romanian russian spanish swedish
以英语为例:1
2
3"english") stemmer = SnowballStemmer(
"running")) print(stemmer.stem(
run
可以设置忽略停用词:1
2
3
4
5"english", ignore_stopwords=True) stemmer2 = SnowballStemmer(
"having")) print(stemmer.stem(
have
"having")) print(stemmer2.stem(
having
一般来说,SnowballStemmer(“english”)要比PorterStemmer()更准确。1
2
3
4"english").stem("generously")) print(SnowballStemmer(
generous
"porter").stem("generously")) print(SnowballStemmer(
gener
LancasterStemmer
也是一种词干提取器,直接看代码吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14from nltk.stem.lancaster import LancasterStemmer
lancaster_stemmer = LancasterStemmer()
lancaster_stemmer.stem(‘maximum’)
‘maxim’
lancaster_stemmer.stem(‘presumably’)
‘presum’
lancaster_stemmer.stem(‘presumably’)
‘presum’
lancaster_stemmer.stem(‘multiply’)
‘multiply’
lancaster_stemmer.stem(‘provision’)
u’provid’
lancaster_stemmer.stem(‘owed’)
‘ow’