《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.4 标识化处理

简介:

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

2.4 标识化处理

机器所要理解的最小处理单位是单词(即分词)。所以除了标识化处理之外,我们不宜再对这些文本字符串做更进一步的处理。这里所谓的标识化,实际上就是一个将原生字符串分割成一系列有意义的分词。标识化处理的复杂性因具体的NLP应用而异,当然目标语言本身的复杂性也会带来相关的变化。例如在英语中,我们可以通过正则表达式这样简单的方式来选取纯单词内容和数字。但在中文和日文中,这会成为一个非常复杂的任务。

>>>s = "Hi Everyone !    hola gr8" # simplest tokenizer
>>>print s.split()
['Hi', 'Everyone', '!', 'hola', 'gr8']
>>>from nltk.tokenize import word_tokenize
>>>word_tokenize(s)
['Hi', 'Everyone', '!', 'hola', 'gr8']
>>>from nltk.tokenize import regexp_tokenize, wordpunct_tokenize, blankline_ tokenize 
>>>regexp_tokenize(s, pattern='\w+')
['Hi', 'Everyone', 'hola', 'gr8']
>>>regexp_tokenize(s, pattern='\d+')
['8']
>>>wordpunct_tokenize(s)
['Hi', ',', 'Everyone', '!!', 'hola', 'gr8']
>>>blankline_tokenize(s)
['Hi, Everyone !!  hola gr8']

在上述代码中,我们用到了各种标识器(tokenizer)。我们从最简单的——Python字符串类型的split()方法开始。这是一个最基本的标识器,使用空白符来执行单词分割。当然,split()方法本身也可以被配置成一些较为复杂的标识化处理过程。因此在上面的例子中,我们其实很难找出s.split()与word_tokenize()这两个方法之间的差异。

word_tokenize()方法则是一个通用的、更为强大的、可面向所有类型语料库的标识化处理方法。当然,word_tokenize()是NLTK库的内置方法。如果你不能访问它,那就说明在安装NLTK数据时出了些差错。请参照第1章“自然语言处理简介”中的内容来安装它。

通常情况下,我们有两个最常用的标识器。第一种是word_tokenize(),这是我们的默认选择,基本上能应付绝大多数的情况。另一选择是regex_tokenize(),这是一个为用户特定需求设计的、自定义程度更高的标识器。其他的大部分标识器都可以通过继承正则表达式的标识器来实现。我们也可以利用某种不同的模式来构建一个非常具体的标识器。如在上述代码的第8行,我们也可以基于正则表达式的标识器分割出相同的字符串。你可以用w+这个正则表达式,它会从目标字符串中分隔出所有我们所需要的单词和数字,其他语义符号也可以通过类似的分割器来进行分离,如对于上述代码的第 10 行,我们可以使用d+这个正则表达式。这样我们就能从目标字符串中提取出纯数字内容。

现在,你能为提取大小写单词、数字和金钱符号构建专用的正则表达式标识器吗?

提示:只需参考之前正则表达式的查询模式来使用regex_tokenize()即可。

相关文章
|
6天前
|
Python
python增量赋值运算的应用
Python中的增量赋值运算符用于便捷地执行算术操作,如`+=`, `-=`等,它们分别代表加法、减法、乘法、除法、取模、整除和幂运算。
10 1
|
11天前
|
Python
Python文件操作学习应用案例详解
【4月更文挑战第7天】Python文件操作包括打开、读取、写入和关闭文件。使用`open()`函数以指定模式(如'r'、'w'、'a'或'r+')打开文件,然后用`read()`读取全部内容,`readline()`逐行读取,`write()`写入字符串。最后,别忘了用`close()`关闭文件,确保资源释放。
17 1
|
12天前
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
26 1
python实战篇:利用request库打造自己的翻译接口
|
18天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
6天前
|
机器学习/深度学习 人工智能 算法
图像处理与分析:Python中的计算机视觉应用
【4月更文挑战第12天】Python在计算机视觉领域广泛应用,得益于其丰富的库(如OpenCV、Pillow、Scikit-image)和跨平台特性。图像处理基本流程包括获取、预处理、特征提取、分类识别及重建生成。示例代码展示了面部和物体检测,以及使用GAN进行图像生成。
|
1天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。
|
2天前
|
JSON API 数据格式
python的request库如何拿到json的返回值
python的request库如何拿到json的返回值
4 0
|
2天前
|
数据采集 NoSQL 搜索推荐
五一假期畅游指南:Python技术构建的热门景点分析系统解读
五一假期畅游指南:Python技术构建的热门景点分析系统解读
|
2天前
|
API 调度 开发者
深入理解Python异步编程:从Asyncio到实战应用
在现代软件开发中,异步编程技术已成为提升应用性能和响应速度的关键策略。本文将通过实例讲解Python中的异步编程核心库Asyncio的基本概念、关键功能以及其在Web开发中的应用。我们不仅将理论与实践结合,还将展示如何通过实际代码示例解决常见的并发问题,帮助开发者更有效地利用Python进行异步编程。
|
3天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。

热门文章

最新文章