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

英文文本分词处理(NLTK) 1、NLTK的安装 首先,打开终端(Anaconda Prompt)安装nltk: pip install nltk 打开Python终端或是Anaconda 的Spyder并输入以下内容来安装 NLTK 包 import nltk nltk.download() 注意: 详细操作或其他安装方式请查看 Anaconda3安装jieba库和NLTK库。 2、NLTK分词和分句  由于英语的句子基... 阅读详情

访问文本

方法一:

 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 swords
 is no basis for a system of government.  Supreme executive power derives from
 a 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库——词形还原(Lemmatization) 词形还原(Lemmatization) 词性还原,又称为Lemmatizetion 主要是把单词的词缀部分除去,从而得到单词的词干部分 词形还原(Lemmatization)与词干提取(stemming)的区别 词形还原是把单词还原成本身的形式:比如将‘cars’还原成car,把‘ate’还原成‘eat’,把‘handling’还原成‘handle’ 词干提取则是提取单词的词干,比如将‘cars’提取出‘car’,将‘handling’提取出来‘handl’(单纯的去掉ing),对于‘ate’使用 阅读详情

相关推荐

python nltk库 文本分词,去停用词,词语标准化(词干化,词性还原)

import nltk from nltk.corpus import stopwords #停用词 from nltk.tokenize import word_tokenize #分词 from nltk.stem import PorterStemmer #词干化 from nltk.stem import WordNetLemmatizer #词形还原...

Sibyl_Lqq的笔记 3072

NLP(四)词形还原(Lemmatization)

    词形还原(Lemmatization)是文本预处理中的重要部分,与词干提取(stemming)很相似。 一,什么是词形还原     简单说来,词形还原就是去掉单词的词缀,提取单词的主干部分,通常提取后的单词会是字典中的单词,不同于词干提取(stemming),提取后的单词不一定会出现在单词中。比如,单词“cars”词形还原后的单词为“car”,单词“ate”词形还原后的单词为“eat”。     在Python的nltk模块中,使用WordNet为我们提供了稳健的词形还原的函数。如以下示例Pyt.

TFATS的博客 1万+

文本预处理技巧:去除停用词、词形还原、词干提取等

文本预处理是自然语言处理中非常重要的一步,它是为了使得文本数据能够被机器学习模型所处理而进行的一系列操作。其中,去除停用词、词形还原、词干提取等技巧是比较常用的。本文将介绍这些技巧的原理,并提供使用Python实现的代码示例,帮助读者更好地理解和实践。

qq_33578950的博客 1万+

NLTK 词干化

NLTK 词干化 在NLP中,我们对一句话或一个文档分词之后,一般要进行词干化处理。词干化处理就是把一些名词的复数去掉,动词的不同时态去掉等等类似的处理。 对于切词得到的英文单词要进行词干化处理,主要包括将名词的复数变为单数和将动词的其他形态变为基本形态 在nltk当中有两种方法做词干化处理:“porter” “snowball” import nltk word_data = "It originated from the idea that there are readers who prefer le

qq_28404829的博客 1465

文本分类(1)-文本预处理

在进行文本分类之前,需要对文本进行预处理。文本预处理过程大致分为以下几点: 1、英文缩写替换 预处理过程中需要把英文缩写进行替换,如it’s和it is是等价的,won’t和will not也是等价的,等等。 text = "The story loses its bite in a last-minute happy ending that's even less plausible than ...

weixin_44766179的博客 1万+

自然语言处理 | (4)英文文本处理与NLTK

本篇博客我们将介绍使用NLTK对英文文本进行一些基本处理,之后我们还会学习一些更高级的模型或方法,不过这些基本处理要熟练掌握,因为他们可以对我们的数据进行一些预处理,作为更高级模型或工具的输入。 目录 1.NLTK简介 2.英文Tokenization(标记化/分词) 3.停用词 4.词性标注 5.chunking/组块分析 6.命名实体识别 7.Stemming和Lemmatiz...

sdu_hao的博客 4910

NLTK使用方法总结

目录 1. NLTK安装与功能描述 2. NLTK词频统计(Frequency) 3. NLTK去除停用词(stopwords) 4. NLTK分句和分词(tokenize) 5. NLTK词干提取 (Stemming) 6. NLTK词形还原(Lemmatization) 7.NLTK词性标注(POS Tag) 8. NLTK中的wordnet NLTK(natural...

分享实践与思考 3万+

使用NLTK库进行词干提取的Python教程

其中一个常用的功能是词干提取,它可以将单词转换为其基本形式,从而减少词形变化带来的干扰。通过使用NLTK的词干提取器,我们可以将单词转换为它们的基本形式,从而简化文本处理和分析任务。可以看到,词干提取器能够将这些单词转换为它们的基本形式。需要注意的是,词干提取并不总是能够得到一个真实的单词,有时会得到一个类似的形式。在这段代码中,我们下载了NLTK所需的数据,这些数据包括用于句子分割、词性标注和词形还原的资源。最后,我们打印出原始单词和提取后的词干。,NLTK库还提供了其他的词干提取器,如。

2301_79366177的博客 423

NLTK自然语言处理实战:2.3 词干提取与词形还原

摘要 本文介绍了NLTK中的词干提取与词形还原技术,这是自然语言处理中重要的文本归一化方法。词干提取通过去除后缀得到词干(如Porter、Lancaster算法),速度快但不考虑上下文;词形还原则基于WordNet词典还原为完整词元(如WordNetLemmatizer),准确性高但需要词性信息。文章通过代码示例对比了不同方法的效果,并总结了它们的特点:词干提取适合信息检索等对速度要求高的场景,而词形还原更适合文本分类等需要高准确性的任务。

AI 题库 —— 软件编程老兵专属分享阵地,聚焦青少年编程等级考、Python/C++ 信息学奥赛、机器人技术等级考试备考干货,依托智能题库资源,用 5 年一线教学经验助力编程学习高效备考! 1428

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 189

NLTK简介及使用示例

参考文章:自然语言处理库——NLTK_满腹的小不甘-优快云博客 NLP 自然语言处理的开发环境搭建_村雨遥-优快云博客_nlp开发 nlp---Nltk 常用方法_飘过的春风-优快云博客 NLTK 基础知识总结_村雨遥-优快云博客_nltk NLTK :: Natural Language Toolkit(官网) NLTK :: Sample usage for stem NLTK_百度百科 GitHub - nltk/nltk_data: NLTK Data 1.简介 Natu

justlpf的专栏 4万+

换频道——假想《道德经》与量子力学的一些联系

之前看到一位AI PM的前辈分享了自己对于PM境界的看法: 境界一,行事被放心。 境界二,独立主导产品线从0到1,做正确的事,并把事做正确。 境界三,一切以灵魂境界为基础,产品作为其理念的衍生。 对于我,3个月尝试于目标而无获,但塞翁失马焉知非福。自己已经具备境界一,虽然境界二尚未成熟,但境界三却有幸有所思考。 今天,往澳门的动车途中有感而发,为随笔。

1020

词干提取(stemming)和词形还原(lemmatization)

一、词形还原和词干提取的对比 词形还原(lemmatization),是把一个任何形式的语言词汇还原为一般形式(能表达完整语义),而词干提取(stemming)是抽取词的词干或词根形式(不一定能够表达完整语义)。词形还原和词干提取是词形规范化的两类 重要方式,都能够达到有效归并词形的目的,二者既有联系也有区别。 目标一致。词干提取和词形还原的目标均为将词的屈折形态或派生形态简化或归并为词干(s...

永远飞翔的鸟 3915

带有HSE组件的S32系列芯片中各子系统如何依次启动?

仔细阐述了上电后各个子系统的启动顺序,并给出了详细的启动步骤流程图。

车载系统攻城狮 1702

华为面试手撕真题【最长不重复子串】

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

MISAYAONE的博客 1万+

自然语言处理——词性标注、词干提取、词形还原

目录前言方法工具实例 前言 一般而言,文本里的动词可能比较重要,而助词可能不太重要: 我今天真好看 我今天真好看啊 甚至有时候同一个词有着不同的意思: 我一把把把把住了 越是常用的词,不同的用法越多。由于兼类使用程度高,兼类现象涉及汉语中大部分词类,因而造成在汉语文本中词类歧义排除的任务量巨大。 那么这个时候可以先对词汇进行词性标注(即在文本中判定每个词的语法范畴,确定其词性并加以标注的过程),再基于词性提取关键词。因此,词性标注为文本处理提供了相当关键的信息。 方法 基于规则的词性标注方法:较早

weixin_44853840的博客 3621

2023年五一数学建模 | 第二十届五一数学建模C题:“双碳”目标下低碳建筑研究

2023年五一数学建模 | 第二十届五一数学建模C题:“双碳”目标下低碳建筑研究

前程算法屋的博客 1377

使用NLTK进行英文文本的分词和统计词频

目录分词分词后词干提取和词形归一Stemming词干提取 分词 先将文档读入,然后全部变为小写 txt=open("English.txt","r").read() txt = txt.lower()#将英文全部变为小写 中文分词需要专门的方法: 英文分词就可以直接使用word_tokenize()进行分词 text="This is a text for test.And I want to learn how to use nltk." words = nltk.word_token

苣篛 6004

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1482

华为OD机试 - 计算数列位置N的值 - 模拟法(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。输入 M,N 两个数,则按照以下规则形成一个数列。数列的前 M 个元素的值为 1 到 M从 M+1 个元素开始,计算逻辑为如果其前 M 个元素中,存在值相同的元素,则该位置上的数值等于前 M 个数中最大数值与最小数值之和。如果其前 M 个元素中,

学Java,找哪吒 508

自然语言处理库——NLTK

NLTK(www.nltk.org)是在处理预料库、分类文本、分析语言结构等多项操作中最长遇到的包。其收集的大量公开数据集、模型上提供了全面、易用的接口,涵盖了分词、词性标注(Part-Of-Speech tag, POS-tag)、命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。 ...

满腹的小不甘 7926

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NLP之文本预处理

对于自然语言处理的话,预处理其实就是有那么几个固定的步骤: 分词,英文的话全部转换为小写,去除标点符号,提取词干,出去不是英文的单词,出去特殊的符号,修正错别字。 1.分词 (Tokenization) Token 是符号,包括了单词还有标点符号两种。 Tokenization 就是把一句话或者一段话分解成单个的单词和标点。比如 I like yourcat. 这句话分词之后就变成了 ['I...

数据之旅的点点滴滴 5939

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用Python中的NLTK和spaCy删除停用词与文本标准化

 概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatization) 在Python中使用NLTK,spaCy和Gensim库进行去除停用词和文本标准化 介绍 多样化的自然语言处理(NLP)是真的很棒,我们以前从未...

TensorFlowNews 9846

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

自然语言处理中的几种文本预处理的写法总结

写在前面的话 biaji,<( ̄3 ̄)> bia叽,嘎嘎,最近来教大家写点简单又迷人的自然语言处理的代码。 不好意思,原谅我用词不当,毕竟我是菜鸟,也没得资格教别人,the main reason is that 我自己写了给自己看的,你看我就是这样一个正直,又不爱慕虚荣的小公主呢~ 感觉自己萌萌哒,啊哈哈哈,不要脸也确实是真的 反正也没有啥子浏览量,估计就是自己每天看自己写的...

编程小栈 1万+

【小沐学NLP】Python使用NLTK库的入门教程

NLTK - 自然语言工具包 - 是一套开源Python。支持自然研究和开发的模块、数据集和教程 语言处理。NLTK 需要 Python 版本 3.7、3.8、3.9、3.10 或 3.11。NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。它提供了易于使用的接口,通过这些接口可以访问超过50个语料库和词汇资源(如WordNet),还有一套用于分类、标记化、词干标记、解析和语义推理的文本处理库,以及工业级NLP库的封装器和一个活跃的讨论论坛。

爱看书的小沐 1万+
上一篇: NLTK(0)参考文章
下一篇: NLTK(7)从文本提取信息(命名实体识别)
选西瓜专业户
博客等级 码龄8年 3139粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值