《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或某种依赖性解析器中的某些部分,那么就应该避免进行词干提取操作,因为词干提取会对相关分词进行修改,这有可能会导致不同的结果。

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

相关文章
|
9天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
49 6
|
10天前
|
数据采集 数据安全/隐私保护 开发者
非阻塞 I/O:异步编程提升 Python 应用速度
非阻塞 I/O:异步编程提升 Python 应用速度
|
6天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
9天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
33 0
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
思通数科AI平台在尽职调查中的技术解析与应用
思通数科AI多模态能力平台结合OCR、NLP和深度学习技术,为IPO尽职调查、融资等重要交易环节提供智能化解决方案。平台自动识别、提取并分类海量文档,实现高效数据核验与合规性检查,显著提升审查速度和精准度,同时保障敏感信息管理和数据安全。
42 11
|
2天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
12 4
|
2天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
11 1
|
2天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
11 2
|
2天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
11 1
|
8天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
29 7
下一篇
无影云桌面