文本预处理步骤
文章目录
词干提取(stemming)
概念
词干提取是英文语料预处理的一个步骤(中文并不需要),因为在英语中,一个单词常常是另一个单词的“变种”,如:happy=>happiness,这里happy叫做happiness的词干(stem)。
去除这些英文单词分词变换形式的结尾,即提取词干(stemming),能使Term规范化,这在实现信息检索系统中非常重要1。
波特(Porter)词干算法
Porter算法由马丁.波特博士(Dr. Martin Porter)发表于1980年7月的出版的《Program》杂志上。
该算法主要关注点是删除单词的共同结尾,比较热门的检索系统包括Lucene、Whoosh等中的词干过滤器就是采用的Porter词干算法。
需要注意的是,Porter并不是要把单词变为规范的那种原来的样子,它只是把很多基于这个单词的变种变为某一种形式。
换句话说,它不能保证还原到单词的原本,也就 是"created"不一定能还原到"create",但却可以使"create" 和 “created” ,都得到"creat" 2。
雪球(Snowball)词干算法
马丁.波特博士在自己的工作上进行延伸,将Porter算法发展为Snowball算法。Snowball这个名称致敬了SNOBOL编程语言,即“面向字符串和符号式的语言”3。
Snowball 在 Porter 的基础上加了很多优化。Snowball 与 Porter 相比差异约为5%。
>>> from nltk.stem.snowball import SnowballStemmer
>>> print(" ".join(SnowballStemmer.languages))
danish dutch english finnish french german hungarian italian
norwegian porter portuguese romanian russian spanish swedish
>>> stemmer = SnowballStemmer("english")
>>> print(stemmer.stem("running"))
run
统计词频(TF)
借用阮一峰老师使用的例子4:
假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。
一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。
某个单词出现的频率被称为词频(Term Frequency, TF)。
T F = 某 个 词 在 文 章 中 的 出 现 次 数 文 章 总 词 数 TF = \frac {某个词在文章中的出现次数}{文章总词数}