【Python】自然语言处理神器:NLTK库初探与文本处理案例

自然语言处理神器:NLTK库初探与文本处理案例

在自然语言处理(NLP)领域,Python 的 NLTK(Natural Language Toolkit,自然语言工具包)被广泛认为是入门级和应用级的强大工具之一。无论是处理文本、进行语言分析,还是实现高级的机器学习,NLTK 都能提供全面的支持。在这篇博客中,我们将介绍 NLTK 库的基础知识,并演示一些文本处理的案例,最后通过一个完整的实战案例来总结 NLTK 的应用。
在这里插入图片描述

一、什么是 NLTK?

NLTK 是一个强大的 Python 库,包含了 NLP 中广泛使用的工具和数据集。它提供了丰富的文本处理模块,包括分词、词干化、词性标注、语法解析、命名实体识别等,适用于入门到进阶的自然语言处理项目。

安装 NLTK

使用以下命令安装 NLTK 库:

pip install nltk

安装完成后,我们可以通过导入 nltk 库来开始使用:

import nltk

此外,许多 NLTK 的功能依赖于数据包,比如词典和语料库。我们可以通过以下命令下载这些依赖:

nltk.download()

在弹出的窗口中选择所需的资源进行下载。
在这里插入图片描述

二、NLTK 的基本功能

1. 分词 (Tokenization)

分词是 NLP 中最基础的步骤之一,将文本分解成单个的词或句子。NLTK 提供了 word_tokenizesent_tokenize 两种分词方法,分别用于单词分词和句子分词。

from nltk.tokenize import word_tokenize, sent_tokenizetext = "NLTK is a leading platform for building Python programs to work with human language data."
print("句子分词:", sent_tokenize(text))
print("单词分词:", word_tokenize(text))

2. 词干化 (Stemming)

词干化是将一个单词还原为词干的过程。NLTK 提供了 PorterStemmerLancasterStemmer,这两种算法用于词干提取。

from nltk.stem import PorterStemmerstemmer = PorterStemmer()
words = ["running", "jumps", "easily", "fairly"]
stemmed_words = [stemmer.stem(word) for word in words]
print("词干提取结果:", stemmed_words)

3. 词性标注 (POS Tagging)

词性标注将每个单词标注为名词、动词、形容词等。NLTKpos_tag 方法可以帮助我们标注每个词的词性。

from nltk import pos_tagwords = word_tokenize("NLTK is a great library for NLP tasks.")
pos_tags = pos_tag(words)
print("词性标注结果:", pos_tags)

4. 命名实体识别 (NER)

NLTK 还提供了命名实体识别工具,用于识别文本中的人名、地名、机构名等实体信息。可以使用 ne_chunk 进行命名实体识别。

from nltk import ne_chunkentities = ne_chunk(pos_tag(word_tokenize("Albert Einstein was a theoretical physicist.")))
print("命名实体识别结果:")
entities.draw()

在这里插入图片描述

三、文本处理案例

接下来,我们通过一个案例演示如何使用 NLTK 进行文本清理、分析和理解。

案例:情感分析

我们将对一个简单的文本进行情感分析,通过分词、停用词去除、词干化等步骤处理文本,并最终计算文本的积极和消极词的数量。

第一步:导入情感词典

可以使用 NLTK 提供的词典,比如 opinion_lexicon,其中包含了积极和消极的词汇。

from nltk.corpus import opinion_lexicon
from nltk.tokenize import word_tokenizenltk.download("opinion_lexicon")positive_words = set(opinion_lexicon.positive())
negative_words = set(opinion_lexicon.negative())
第二步:预处理文本
text = "The movie was a fantastic experience, but some scenes were terribly slow."
tokens = word_tokenize(text.lower())
第三步:情感分析

我们可以通过对每个词的情感词典查询来统计积极和消极词的数量。

positive_count = len([word for word in tokens if word in positive_words])
negative_count = len([word for word in tokens if word in negative_words])print("积极词数量:", positive_count)
print("消极词数量:", negative_count)

通过以上步骤,我们可以得到一个简单的情感分析结果,从而对文本的整体情感有初步的了解。
在这里插入图片描述

四、实战:电影评论情感分析器

我们将创建一个完整的电影评论情感分析器,该分析器能够处理用户输入的电影评论,并输出情感分析结果。

步骤 1:构建情感分析函数

首先定义一个函数,用于处理输入文本并返回情感分析结果。

def sentiment_analysis(text):tokens = word_tokenize(text.lower())positive_count = len([word for word in tokens if word in positive_words])negative_count = len([word for word in tokens if word in negative_words])if positive_count > negative_count:sentiment = "积极"elif negative_count > positive_count:sentiment = "消极"else:sentiment = "中立"return {"text": text,"positive_count": positive_count,"negative_count": negative_count,"sentiment": sentiment}

步骤 2:测试情感分析器

我们可以创建一个简单的交互,让用户输入评论,并输出分析结果。

if __name__ == "__main__":text = input("请输入电影评论:")result = sentiment_analysis(text)print("分析结果:", result)

结果展示

当我们输入评论时,例如“这部电影真的非常棒,但一些场景显得拖沓”,程序将返回积极和消极词的数量以及最终的情感分类。

请输入电影评论:这部电影真的非常棒,但一些场景显得拖沓
分析结果:{'text': '这部电影真的非常棒,但一些场景显得拖沓', 'positive_count': 1, 'negative_count': 1, 'sentiment': '中立'}

通过这个实战,我们可以更好地理解 NLTK 在 NLP 中的强大功能及其应用。
在这里插入图片描述

总结

NLTK 提供了丰富的自然语言处理工具和预定义语料库,使得 NLP 项目变得更加轻松。在本文中,我们初步探索了 NLTK 的分词、词干化、词性标注等功能,并通过一个完整的情感分析实战展示了 NLTK 的应用。希望这篇文章能帮助你更好地理解 NLTK 的强大之处,快速入门自然语言处理!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从放弃985计科保研到秋招进大厂,我是怎么做的?【秋招经验分享】

从放弃985计科保研到秋招进大厂,我是怎么做的 先来介绍一下我自己,bg为985计算机本科,我在放弃了计科保研以后,成功拿到了美团等大厂研发岗的offer。目前秋招已经接近尾声了,我想记录一下这段时间的秋招感悟和经验&…

STM32F103C8T6学习笔记4--模拟旋转编码器的按键中断

1、实验内容 通过旋转编码器正反转来计数,由对应的GPIO产生中断。但是我在Proteus里面没有找到相关的EC11旋转编码器元件,暂时通过电路模拟的方式实现。 S1按下引脚PB0产生低电平信号,触发中断,计数值减一。 S2按下引脚PB1产生低…

宝顶白芽,慢生活的味觉盛宴

在快节奏的生活中,人们愈发向往那种悠然自得、返璞归真的生活方式。白茶,以其独特的韵味和清雅的风格,成为了现代人追求心灵宁静与生活品质的象征。而在众多白茶之中,竹叶青茶业出品的宝顶白芽以其甘甜醇爽的特质,成为…

23.智能停车计费系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2 相关概念和技术介绍 2.1 JAVA技术介绍 2.2 SpringBoot框架 2.3B/S架构 2.4 MySQL数据库 3 系统需求分析 3.1 问题定义 3.2 可行性分析 3.3系统用例分析 3.4 系统流程分析 3.4.1 登录流程 3.4.2 添加信息流程 3.4.3 删除信息流程 4…

C语言学习,标准库<locale.h>

<locale.h> 是 C 标准库中的一个头文件&#xff0c; 提供了本地化&#xff08;Localization&#xff09;和国际化&#xff08;Internationalization&#xff09;的支持。它提供了一组函数和宏来设置或查询程序的本地化信息&#xff0c;例如日期、时间、货币、数字格式等。…

Chrome 130 版本开发者工具(DevTools)更新内容

Chrome 130 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、网络&#xff08;Network&#xff09;面板更新 1. 重新定义网络过滤器 网络面板获新增了一些过滤条件&#xff0c;这些过滤条件是根据反馈重新设计的&#xff0c;特定于类型的过滤条件保持不变&…

清华双臂机器人扩散大模型RDT:先预训练后微调,支持语言、图像、动作多种输入(1B参数)

前言 通过上文介绍的GR2&#xff0c;我们看到了视频生成模型在机器人训练中的应用 无独有偶&#xff0c;和GR2差不多一个时期出来的清华RDT&#xff0c;其模型架构便基于视频生成架构DiT改造而成(当然&#xff0c;该清华团队其实也在DiT之前推出了U-ViT&#xff0c;具体下文会…

leetcode动态规划(二十六)-最长重复子数组

题目 718.最长重复子数组 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&#xff1a;长度最长的公共子数组是 [3,2,…

万彪离职,荣耀CEO赵明豪赌AI手机胜算几何?

"荣耀新的远方在哪里&#xff1f;" 作者 | 米 卢 编辑 | 卢旭成 10月30日晚&#xff0c;荣耀在深圳国际会展中心发布了AI旗舰手机mogic7系列&#xff0c;这意味着终于能真正独立操盘荣耀的CEO赵明&#xff0c;开始压上全部身家&#xff0c;豪赌AI手机。 赵明说&…

SpringBoot在线教育系统:集成第三方服务

5系统详细实现 5.1 普通管理员管理 管理员可以对普通管理员账号信息进行添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 普通管理员管理界面 5.2 课程管理员管理 管理员可以对课程管理员进行添加修改删除操作。具体界面如图5.2所示。 图5.2 课程管理员管理界面 5.3 …

uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题(PC端钉钉小程序 接口API回调函数不执行)

uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题 1. 问题描述2. 解决办法 使用钉钉提供的api 1. 问题描述 使用uni-app开发小程序&#xff0c;移动端钉钉小程序使用没问题&#xff0c;但是在PC端钉钉小程序却发现一些逻辑没有执行。经过后端接口日志查询&#…

六、Go语言快速入门之数组和切片

文章目录 数组和切片数组:one: 数组初始化:two: 数组的遍历:three: 多维数组:four: 将数组传递给函数 切片(Slice):one: 切片的初始化:star: new和make区别 :two: 切片的使用:three: 将切片传递给函数:four: 多维切片:four: Bytes包:four: 切片和垃圾回收 &#x1f4c5; 2024年…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中&#xff0c;选择Design Settings打开窗口&#xff0c;会有六个选项&#xff1a;DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

ArcGIS Pro SDK (二十一)渲染

ArcGIS Pro SDK (二十一)渲染 文章目录 ArcGIS Pro SDK (二十一)渲染1 定义唯一值呈现器定义2 为最新观测值设置唯一值渲染器3 为先前的观测值设置唯一值渲染器4 设置简单的渲染器以绘制轨迹线5 检查先前的观测值和轨道线可见性6 使轨迹线和先前的观测点可见7 检索当前观测…

大模型备案安全评估报告编写说明

一、语料安全评估 (一)评估内容 1.文本训练语料规模 训练语料存储规模&#xff0c;按文本格式存储时的语料大小。 训练语料数量&#xff0c;按词元(Token)计数。 2.各类型语料规模 训练语料中的中文文本、英文文本、代码、图片、音频、视频及其他语料的规模。 3.训练语料…

Shiro权限刷新

一、权限刷新的需求背景 在实际应用中&#xff0c;用户的权限可能会因为多种原因而发生变化&#xff0c;如用户角色的调整、权限的授予或撤销等。如果系统不能及时地反映这些变化&#xff0c;就可能导致安全漏洞或功能受限。因此&#xff0c;Shiro框架提供了权限刷新的机制&am…

sqlserver循环的学习

最近在测试项目功能时&#xff0c;需要生成一些随机的问题总数、改善数、改善率的数据&#xff0c;因此需要用到SqlServer的循环&#xff0c;在这里记录一下。下面以随机生成十条数据为例&#xff0c;表结构如下: CREATE TABLE re_class(guid NVARCHAR(50) primary key,totalC…

ElementUI<el-table></el-table>表格中固定列横向滚动条无法拖动解决

当表格有固定列会出现横向滚动条无法拖动问题&#xff0c;尤其是固定列固定在左边且表格没数据的时候。这可能是因为固定区域盖住了横向滚动条&#xff0c;不是视觉上的覆盖&#xff0c;是去拖动时没有触发效果。 解决方法如下&#xff1a; 1.修改层级 使用z-index&#xff0…

ctfshow web系列

声明: 本文章只适用于网络安全交流与学习,请读者遵循网络安全法,若读者从事一些与网络安全不相关的事情&#xff0c;结果均与本人无关&#xff01;&#xff01;&#xff01; 是ctfshow的web题:https://www.ctf.show/ web3: 开局提示使用php include get url include()函数是…

善用Git LFS来降低模型文件对磁盘的占用

将讲一个实际的例子&#xff1a;对于模型文件&#xff0c;动辄就是好几个G&#xff0c;而有的仓库更是高达几十G&#xff0c;拉一个仓库到本地&#xff0c;稍不注意直接磁盘拉满都有可能。 比如&#xff1a;meta-llama-3.1-8b-instruct&#xff0c;拉到本地后发现居然占用了60G…