NLTK(3)处理文本、分词、词干提取与词形还原

2024-04-14 23:32

本文主要是介绍NLTK(3)处理文本、分词、词干提取与词形还原,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 访问文本
  • @字符串处理
  • @编码
  • @正则表达式
  • 分词
    • @正则表达式分词(不好)
    • Tokenize命令
    • @自定义函数
  • 规范化文本
    • 将文本转换为小写
    • 查找词干
      • @自定义函数(不好)
      • NLTK词干提取器
        • Porter
        • Lancaster
        • Snowball
    • 词形还原

访问文本

方法一:

 f=open(r"E:\dict\q0.txt","r")for line in f:print(line.strip())

方法二:

 with open(r"C:\Users\cuitbnc\Desktop\dqdg.txt","r+") as f:str=f.read()

方法三:

 import nltk
path=nltk.data.find(r'C:\Users\cuitbnc\Desktop\dqdg.txt')
raw=open(path,'rU').read()
len(raw)

strip() 方法删除输入行结尾的换行符

@字符串处理

有用的字符串方法:

方法	功能
s.find(t)	字符串s中包含t的第一个索引(没找到返回(-1)
s.rfind(t)	字符串s中包含t的最后一个索引(没找到返回-1)
s.index(t)	与s.find(t)功能类似,但没找到时引起ValueError
s.rindex(t)	与s.rfind(t)功能类似,但没找到时引起ValueError
s.join(text)	使用s连接text中的文本为一个字符串
s.split(t)	在所有找到t的位置将s分割成列表(默认为空白符)
s.splitlines()	将s按行分割成字符串列表
s.lower()	小写版本的字符串s
s.upper()	大写版本的字符串s
s.title()	首字母大写版本的字符串s
s.strip()	s不带前导或尾随空格的副本
s.replace(t, u)	用u替换s中的t

@编码

 path = nltk.data.find('corpora/unicode_samples/polish-lat2.txt')f = open(path, encoding='latin2')for line in f:line = line.strip()print(line)

encode()

@正则表达式

re.findall()只是给我们后缀。这是因为括号有第二个功能:选择要提取的子字符串。
如果我们要使用括号来指定析取的范围,但不想选择要输出的字符串,必须添加?:
r在字符串之前表示防止转义

在Python中使用正则表达式,需要使用import re导入re库。
re.search(p, s) 检查字符串s中是否有模式p(只匹配到一项)

re.findall() 找出指定正则表达式的所有匹配
search()函数从全部内容匹配,如果有多个,找到第一个匹配的
findall()函数从全部内容匹配,如果有多个,找出所有匹配的

word = 'supercalifragilisticexpialidocious'
re.findall(r'[aeiou]', word)
#['u', 'e', 'a', 'i', 'a', 'i', 'i', 'i', 'e', 'i', 'a', 'i', 'o', 'i', 'o', 'u']

re.sub() 替换
sub()的第一个参数是要匹配的模式,第二个参数是要替换上的模式。

#使用示例:把日期格式从'09/30/2018'转换成'2018-09-30'
text = 'Today is 9/30/2018. PyCon starts 3/13/2013.'
re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
# 'Today is 2018-9-30. PyCon starts 2013-3-13.'

正则表达式基本元字符,其中包括通配符,范围和闭包

操作符	行为
.	通配符,匹配所有字符
^abc	匹配以abc开始的字符串
abc$	匹配以abc结尾的字符串
[abc]	匹配字符集合中的一个
[A-Z0-9]	匹配字符范围中的一个
ed|ing|s	匹配指定的一个字符串(析取)
*	前面的项目零个或多个,例如a*, [a-z]*(也叫Kleene 闭包)
+	前面的项目1 个或多个,例如a+, [a-z]+
?	前面的项目零个或1 个(即可选),例如a?, [a-z]?
{n}	精确重复n次,n为非负整数
{n,}	至少重复n次
{,n}	重复不多于n次
{m,n}	至少重复m次不多于n次
a(b|c)+	括号表示操作符的范围

分词

分词是一个比你可能预期的要更为艰巨的任务。没有单一的解决方案能在所有领域都行之有效,我们必须根据应用领域的需要决定哪些是词符。

@正则表达式分词(不好)

raw.split() 在空格符处分割原始文本

注意:在正则表达式前加字母r(表示"原始的"),它告诉Python解释器按照字面表示对待字符串,而不去处理正则表达式中包含的反斜杠字符。

正则表达式符号

符号	功能
\b	词边界(零宽度)
\d	任一十进制数字(相当于[0-9])
\D	任何非数字字符(等价于[^0-9])
\s	任何空白字符(相当于[ \t\n\r\f\v])
\S	任何非空白字符(相当于[^ \t\n\r\f\v])
\w	任何字母数字字符(相当于[a-zA-Z0-9_])
\W	任何非字母数字字符(相当于[^a-zA-Z0-9_])
\t	制表符
\n	换行符

Tokenize命令

raw = """DENNIS: Listen, strange women lying in ponds distributing swordsis no basis for a system of government.  Supreme executive power derives froma mandate from the masses, not from some farcical aquatic ceremony."""
tokens = word_tokenize(raw)

word_tokenize(raw)

@自定义函数

对于一些书写系统,由于没有词的可视边界,文本分词变得更加困难。
根据(Brent, 1995),我们可以定义一个目标函数,一个打分函数,我们将基于词典的大小和从词典中重构源文本所需的信息量尽力优化它的值。
计算目标函数:给定一个假设的源文本的分词(左),推导出一个词典和推导表,它能让源文本重构,然后合计每个词项(包括边界标志)与推导表的字符数,作为分词质量的得分;得分值越小表明分词越好。
在这里插入图片描述

规范化文本

将文本转换为小写

set(w.lower() for w in text) 通过使用lower()我们将文本规范化为小写

查找词干

@自定义函数(不好)

def stem(word):for suffix in ['ing', 'ly', 'ed', 'ious', 'ies', 'ive', 'es', 's', 'ment']:if word.endswith(suffix):return word[:-len(suffix)]return word

去掉看起来像后缀的词

NLTK词干提取器

Porter

nltk.PorterStemmer()

porter = nltk.PorterStemmer()[porter.stem(t) for t in tokens]#['DENNI', ':', 'Listen', ',', 'strang', 'women', 'lie', 'in', 'pond',
'distribut', 'sword', 'is', 'no', 'basi', 'for', 'a', 'system', 'of', 'govern',
'.', 'Suprem', 'execut', 'power', 'deriv', 'from', 'a', 'mandat', 'from',
'the', 'mass', ',', 'not', 'from', 'some', 'farcic', 'aquat', 'ceremoni', '.']
Lancaster

nltk.LancasterStemmer()

lancaster = nltk.LancasterStemmer()
[lancaster.stem(t) for t in tokens]
#['den', ':', 'list', ',', 'strange', 'wom', 'lying', 'in', 'pond', 'distribut',
'sword', 'is', 'no', 'bas', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem',
'execut', 'pow', 'der', 'from', 'a', 'mand', 'from', 'the', 'mass', ',', 'not',
'from', 'som', 'farc', 'aqu', 'ceremony', '.']
Snowball

SnowballStemmer()

from nltk.stem import SnowballStemmer  
snowball_stemmer = SnowballStemmer(“english”)  
snowball_stemmer.stem(‘maximum’)

Porter 和Lancaster 词干提取器按照它们自己的规则剥离词缀。请看Porter词干提取器正确处理了词lying(将它映射为lie),而Lancaster词干提取器并没有处理好。
词干提取过程没有明确定义,我们通常选择心目中最适合我们的应用的词干提取器。如果你要索引一些文本和使搜索支持不同词汇形式的话,Porter词干提取器是一个很好的选择.

词形还原

WordNet为我们提供了稳健的词形还原的函数
要求手动注明词性,否则可能会有问题。因此一般先要分词、词性标注,再词性还原。
WordNetLemmatizer()
wnl.lemmatize() 函数可以进行词形还原,第一个参数为单词,第二个参数为该单词的词性

from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()#lemmatize nouns
print(wnl.lemmatize('men', 'n'))#lemmatize verbs
print(wnl.lemmatize('ate', 'v'))#lemmatize adjectives
print(wnl.lemmatize('saddest', 'a'))

men
eat
sad

这篇关于NLTK(3)处理文本、分词、词干提取与词形还原的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904326

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学