《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.5 词干提取

简介:

本节书摘来异步社区《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书中的第2章,第2.5节,作者:Nitin Hardeniya,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 词干提取

所谓词干提取(stemming),顾名思义就是一个修剪枝叶的过程。这是很有效的方法,通过运用一些基本规则,我们可以在修剪枝叶的过程中得到所有的分词。词干提取是一种较为粗糙的规则处理过程,我们希望用它来取得相关分词的各种变化。例如eat这个单词就会有像eating、eaten、eats等变化。在某些应用中,我们是没有必要区分eat和eaten之间的区别的,所以通常会用词干提取的方式将这种语法上的变化归结为相同的词根。由此可以看出,我们之所以会用词干提取方法,就是因为它的简单,而对于更复杂的语言案例或更复杂的NLP任务,我们就必须要改用词形还原(lemmatization)的方法了。词形还原是一种更为健全、也更有条理的方法,以便用于应对相关词根的各种语法上的变化。

下面,我们就来看一段词干提取的具体过程:

>>>from nltk.stem import PorterStemmer # import Porter stemmer
>>>from nltk.stem.lancaster import LancasterStemmer
>>>from nltk.stem.Snowball import SnowballStemmer
>>>pst = PorterStemmer()   # create obj of the PorterStemmer
>>>lst = LancasterStemmer() # create obj of LancasterStemmer 
>>>lst.stem("eating")
eat
>>>pst.stem("shopping")
shop

一个拥有基本规则的词干提取器,在像移除-s/es、-ing或-ed这类事情上都可以达到70%以上的精确度,而Porter词干提取器使用了更多的规则,自然在执行上会得到很不错的精确度。

我们创建了不同的词干提取器对象,并在相关字符串上调用了 stem()方法。结果如你所见,当用一个简单实例来查看时,它们之间并没有太大的差别,但当多种词干提取算法介入时,就会看到它们在精准度和性能上的差异了。关于这方面的更多细节,你可以去看看 http://www.nltk. org/api/nltk.stem.html 页面上的相关信息。通常情况下,我们使用的是Porter词干提取器,如果是在英语环境中工作,这个提取器已经够用了。当然,还有Snowball提取器这一整个提取器家族,可分别用于处理荷兰语、英语、法语、德语、意大利语、葡萄牙语、罗马尼亚语和俄语等语言。特别地,我也曾经遇到过可用来处理印地文的轻量级词干提取器:http://research.variancia.com/hindi_stemmer

注意 小技巧: 

我们会建议那些希望对词干提取进行更深入研究的人去看看关于所有词干提取器的相关研究http://en.wikipedia. org/wiki/Stemming[2]

但是,对大多数用户而言,Porter和Snowball这两种词干提取器就足以应付大量的相关用例了。在现代的NLP应用中,人们有时候会将词干提取当作是一种预处理步骤从而将其忽略掉,因此这往往取决于我们所面对的具体领域和应用。在这里,我们想告诉你一个事实,即如果你希望用到某些NLP标注器,如词性标注(POS)、NER或某种依赖性解析器中的某些部分,那么就应该避免进行词干提取操作,因为词干提取会对相关分词进行修改,这有可能会导致不同的结果。

当讨论到一般标注器时,我们还会进一步对此展开讨论。

相关文章
|
4天前
|
机器学习/深度学习 数据采集 算法
机器学习之sklearn基础教程
机器学习之sklearn基础教程
|
1天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的最佳实践
【5月更文挑战第25天】 在数据科学和人工智能领域,构建高效的机器学习模型是实现问题解决方案的关键步骤。本文将探讨一系列策略和技术,旨在优化模型的性能并确保其可靠性。我们将从数据预处理的重要性出发,接着讨论特征工程、模型选择、超参数调优以及交叉验证等概念。此外,我们还将探索如何通过正则化技术和集成方法来避免过拟合,并讨论最新的自动化机器学习(AutoML)趋势。文章的目的在于为读者提供一套综合的技术指南,以支持其在构建和部署精确且健壮的机器学习模型时做出明智的决策。
|
1天前
|
存储 关系型数据库 数据库
利用Python与SQLite构建轻量级数据库应用
在当今日益增长的数据处理需求下,数据库成为存储、检索和管理数据的关键技术。然而,对于小型项目或快速原型开发,大型数据库系统可能显得过于庞大和复杂。本文将介绍如何利用Python编程语言与SQLite轻量级数据库,快速搭建一个功能齐全、易于维护的数据库应用。我们将探讨SQLite数据库的特点、Python对SQLite的支持,并通过一个实际案例展示如何构建一个简单的数据库应用,为读者提供一种高效、灵活的解决方案。
|
1天前
|
机器学习/深度学习 分布式计算 数据处理
在Python中应用Spark框架
在Python中应用Spark框架
7 1
|
1天前
|
监控 程序员 Python
Python装饰器:深入解析与应用
Python装饰器:深入解析与应用
|
1天前
|
Python
Python中的模块与包——深入理解与应用
Python中的模块与包——深入理解与应用
|
1天前
|
Python
Python中的逻辑运算符:深入探索与应用
Python中的逻辑运算符:深入探索与应用
|
1天前
|
存储 算法 Python
Python中的列表推导式:深入探索与应用
Python中的列表推导式:深入探索与应用
|
1天前
|
存储 Python
Python中的布尔数据类型:深入探索与应用
Python中的布尔数据类型:深入探索与应用
|
1天前
|
存储 数据处理 索引
Python生成器:深入理解与应用
Python生成器:深入理解与应用

热门文章

最新文章