![](https://csdnimg.cn/release/download_crawler_static/87757266/bg4.jpg)
6.3 提取文本数据的词干 115
1
2
3
4
5
12
6
7
9
8
10
10
words = ['table', 'probably', 'wolves', 'playing', 'is','dog', 'the', 'beaches',
'grounded', 'dreamt', 'envision']
(3) 定义一个稍后会用到的词干提取器列表:
# 对比不同的词干提取算法
stemmers = ['PORTER', 'LANCASTER', 'SNOWBALL']
(4) 初始化3个词干提取器对象:
stemmer_porter = PorterStemmer()
stemmer_lancaster = LancasterStemmer()
stemmer_snowball = SnowballStemmer('english')
(5) 为了以整齐的表格形式将输出数据打印出来,需要设定其正确的格式:
formatted_row = '{:>16}' * (len(stemmers) + 1)
print '\n', formatted_row.format('WORD', *stemmers), '\n'
(6) 迭代列表中的单词,并用3个词干提取器进行词干提取:
for word in words:
stemmed_words = [stemmer_porter.stem(word),
stemmer_lancaster.stem(word), stemmer_snowball.stem(word)]
print formatted_row.format(word, *stemmed_words)
(7) 全部代码已经在stemmer.py文件中给出。运行该代码,可以在命令行工具中看到如图6-2
所示的输出结果。从图6-2中可以看出,Lancaster词干提取器的输出结果与其他词干提取器的输
出结果不同。
图 6-2
6.3.2 工作原理
以上3种词干提取算法的本质目标都是提取出词干,消除词形的影响。它们的不同之处在于
操作的严格程度不同。观察输出结果可以看到,Lancaster词干提取器比其他两个词干提取器更严