- 自然语言工具包教程
- 自然语言工具包 - 首页
- 自然语言工具包 - 简介
- 自然语言工具包 - 入门
- 自然语言工具包 - 文本分词
- 训练分词器和过滤停用词
- 在Wordnet中查找单词
- 词干提取与词形还原
- 自然语言工具包 - 单词替换
- 同义词和反义词替换
- 语料库读取器和自定义语料库
- 词性标注基础
- 自然语言工具包 - 一元标注器
- 自然语言工具包 - 组合标注器
- 自然语言工具包 - 更多NLTK标注器
- 自然语言工具包 - 语法分析
- 组块提取和信息抽取
- 自然语言工具包 - 转换组块
- 自然语言工具包 - 转换树
- 自然语言工具包 - 文本分类
- 自然语言工具包资源
- 自然语言工具包 - 快速指南
- 自然语言工具包 - 有用资源
- 自然语言工具包 - 讨论
词干提取与词形还原
什么是词干提取?
词干提取是一种通过去除词缀来提取单词基本形式的技术。就像把树的枝干砍掉到树干一样。例如,单词eating, eats, eaten的词干是eat。
搜索引擎使用词干提取来索引单词。因此,搜索引擎可以只存储单词的所有形式的词干,而不是存储所有形式。这样,词干提取减少了索引的大小并提高了检索精度。
各种词干提取算法
在NLTK中,stemmerI,它具有stem()方法,接口包含了我们接下来要介绍的所有词干提取器。让我们用下面的图表来理解它
Porter词干提取算法
它是最常见的词干提取算法之一,主要用于去除和替换英语单词的常用后缀。
PorterStemmer类
NLTK具有PorterStemmer类,借助该类,我们可以轻松地为要提取词干的单词实现Porter词干提取算法。此类了解多种规则单词形式和后缀,借助这些形式和后缀,它可以将输入单词转换为最终词干。生成的词干通常是一个较短的单词,具有相同的根含义。让我们看一个例子:
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入PorterStemmer类以实现Porter词干提取算法。
from nltk.stem import PorterStemmer
接下来,创建一个Porter Stemmer类的实例,如下所示:
word_stemmer = PorterStemmer()
现在,输入要提取词干的单词。
word_stemmer.stem('writing')
输出
'write'
word_stemmer.stem('eating')
输出
'eat'
完整的实现示例
import nltk from nltk.stem import PorterStemmer word_stemmer = PorterStemmer() word_stemmer.stem('writing')
输出
'write'
Lancaster词干提取算法
它是在兰开斯特大学开发的,也是另一种非常常见的词干提取算法。
LancasterStemmer类
NLTK具有LancasterStemmer类,借助该类,我们可以轻松地为要提取词干的单词实现Lancaster词干提取算法。让我们看一个例子:
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入LancasterStemmer类以实现Lancaster词干提取算法。
from nltk.stem import LancasterStemmer
接下来,创建一个LancasterStemmer类的实例,如下所示:
Lanc_stemmer = LancasterStemmer()
现在,输入要提取词干的单词。
Lanc_stemmer.stem('eats')
输出
'eat'
完整的实现示例
import nltk from nltk.stem import LancatserStemmer Lanc_stemmer = LancasterStemmer() Lanc_stemmer.stem('eats')
输出
'eat'
正则表达式词干提取算法
借助此词干提取算法,我们可以构建自己的词干提取器。
RegexpStemmer类
NLTK具有RegexpStemmer类,借助该类,我们可以轻松地实现正则表达式词干提取算法。它基本上采用单个正则表达式,并删除与该表达式匹配的任何前缀或后缀。让我们看一个例子:
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入RegexpStemmer类以实现正则表达式词干提取算法。
from nltk.stem import RegexpStemmer
接下来,创建一个RegexpStemmer类的实例,并提供要从单词中删除的后缀或前缀,如下所示:
Reg_stemmer = RegexpStemmer(‘ing’)
现在,输入要提取词干的单词。
Reg_stemmer.stem('eating')
输出
'eat'
Reg_stemmer.stem('ingeat')
输出
'eat' Reg_stemmer.stem('eats')
输出
'eat'
完整的实现示例
import nltk from nltk.stem import RegexpStemmer Reg_stemmer = RegexpStemmer() Reg_stemmer.stem('ingeat')
输出
'eat'
Snowball词干提取算法
这是另一种非常有用的词干提取算法。
SnowballStemmer类
NLTK具有SnowballStemmer类,借助该类,我们可以轻松地实现Snowball词干提取算法。它支持15种非英语语言。为了使用此词干提取类,我们需要使用所用语言的名称创建一个实例,然后调用stem()方法。让我们看一个例子:
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入SnowballStemmer类以实现Snowball词干提取算法。
from nltk.stem import SnowballStemmer
让我们看看它支持的语言:
SnowballStemmer.languages
输出
( 'arabic', 'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'hungarian', 'italian', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', 'spanish', 'swedish' )
接下来,使用要使用的语言创建一个SnowballStemmer类的实例。这里,我们为“法语”创建词干提取器。
French_stemmer = SnowballStemmer(‘french’)
现在,调用stem()方法并输入要提取词干的单词。
French_stemmer.stem (‘Bonjoura’)
输出
'bonjour'
完整的实现示例
import nltk from nltk.stem import SnowballStemmer French_stemmer = SnowballStemmer(‘french’) French_stemmer.stem (‘Bonjoura’)
输出
'bonjour'
什么是词形还原?
词形还原技术类似于词干提取。词形还原后得到的输出称为“词形”,它是根单词,而不是词干提取的输出。词形还原后,我们将得到一个具有相同含义的有效单词。
NLTK提供了WordNetLemmatizer类,它是wordnet语料库的简单包装器。此类使用morphy()函数到WordNet CorpusReader类以查找词形。让我们用一个例子来理解它:
示例
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入WordNetLemmatizer类以实现词形还原技术。
from nltk.stem import WordNetLemmatizer
接下来,创建一个WordNetLemmatizer类的实例。
lemmatizer = WordNetLemmatizer()
现在,调用lemmatize()方法并输入要查找词形的单词。
lemmatizer.lemmatize('eating')
输出
'eating'
lemmatizer.lemmatize('books')
输出
'book'
完整的实现示例
import nltk from nltk.stem import WordNetLemmatizer lemmatizer = WordNetLemmatizer() lemmatizer.lemmatize('books')
输出
'book'
词干提取与词形还原的区别
让我们借助以下示例了解词干提取和词形还原的区别:
import nltk from nltk.stem import PorterStemmer word_stemmer = PorterStemmer() word_stemmer.stem('believes')
输出
believ
import nltk from nltk.stem import WordNetLemmatizer lemmatizer = WordNetLemmatizer() lemmatizer.lemmatize(' believes ')
输出
believ
两个程序的输出说明了词干提取和词形还原之间的主要区别。PorterStemmer类从单词中截取“es”。另一方面,WordNetLemmatizer类查找一个有效的单词。简单来说,词干提取技术只关注单词的形式,而词形还原技术则关注单词的含义。这意味着应用词形还原后,我们始终会得到一个有效的单词。