01_NLP基础之文本处理的基本方法
自然语言处理入门
自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。
对于自然语言来说,处理的数据主要就是人类的语言,例如:汉语、英语、法语等,该类型的数据不像我们前面接触过的结构化数据、或者图像数据可以很方便的进行数值化。
自然语言处理的主要任务:
-
语音识别:将语音信号转化为文本
-
文本分析:从文本中提取有意义的信息,包括情感分析、主题提取等
-
机器翻译:自动将一种语言的文本翻译为另一种语言
-
语法分析:分析句子的语法结构,识别句子中的各个成分(如主语、谓语、宾语等)
-
命名实体识别(NER):识别文本中的重要实体,如人名、地点名、组织名等
-
对话系统:使计算机能够与人类进行自然流畅的对话,如智能助手、聊天机器人等
-
自动摘要:从大量文本中提取出最关键信息并生成简洁的摘要
文本预处理
文本预处理是指在NLP任务中,对原始文本数据进行清洗、转换、标准化等一系列处理的过程。这是NLP工作流中至关重要的第一步,旨在通过去除冗余和无关的部分,提高文本数据的质量和可用性,以便后续的机器学习模型或深度学习模型能够更高效地学习和推理。
文本预处理的作用
- 增强文本表示
- 向量化: 将文本转换为数值向量(如TF-IDF、词嵌入)。
- 特征提取: 提取n-gram、词性、句法结构等特征。
- 上下文建模: 通过预处理为上下文相关的模型(如BERT)提供输入。
- 提高数据质量
- 清洗文本:原始文本可能包含多余的噪声(如HTML标签、标点符号、拼写错误等)。这些内容对NLP模型没有实际意义,反而可能会影响模型的学习效果。文本清洗可以去除这些无关的部分。
- 标准化文本格式:例如统一大小写、统一数字的表示等,有助于减少模型的复杂度,让模型能够聚焦于重要信息。
- 降低计算复杂度
- 分词: 将句子拆分为单词或子词单元,便于后续处理。
- 去停用词:停用词在文本中频繁出现,但对模型的语义贡献较小。去除这些停用词可以
有效减少文本的维度,降低计算复杂度。
- 词形还原与词干提取:通过将不同形式的词汇(如复数、动词时态等)归一化为基础形式,
减少了模型的词汇量,有助于提高模型的训练效率和准确性。
- 改进模型性能
- 降低维度: 通过去除冗余信息,减少特征空间的维度,提高计算效率。
- 增强一致性: 统一文本表示(如大小写转换、标点符号处理),避免模型混淆。
- 改善泛化能力: 通过标准化和归一化,使模型更容易捕捉文本中的关键特征。
文本预处理的基本方法
分词
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
- 英文:单词之间是以空格作为自然分界符的
- 中文:只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符。
中文分词示例
源数据:[只因你太美!]
分词结果:['只因','你','太美','!']
分词的作用
- 作为预处理的第一步,将文本拆分成有意义的单元
- 帮助机器理解句子的基本结构和含义
常用的分词工具
- Jieba分词工具
Jieba(“结巴”)是一个开源的Python中文分词组件,它支持精确模式、全模式和搜索引擎模式三种分词模式。
Jieba分词工具的基本使用方式:
1.jieba.cut
:将分词结果返回到一个生成器对象
2.jieba.luct
:将分词结果返回到返回一个列表对象
函数剖析:
1.jieba.cut
将中文句子分割成独立的单词,
Parameter:- sentence: 要分割的字符串- cut_all: 模型类型, True表示使用全模型,False表示使用精确模式- HMM:是否使用隐马尔可夫模型
jieba.cut
核心源码:
def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False):sentence = strdecode(sentence) # 统一解码为 Unicodere_han = re_han_default # 正则表达式,匹配连续的,'有意义'的词元re_skip = re_skip_default # 正则表达式,跳过空白或换行符# 选择分词算法if cut_all:cut_block = self.__cut_all # 全切分elif HMM:cut_block = self.__cut_DAG # 基于 DAG + HMMelse:cut_block = self.__cut_DAG_NO_HMM # 基于 DAG 无 HMM# 正则切分文本块blocks = re_han.split(sentence) # 按正则表达式对 中文/非中文分割for blk in blocks: # 遍历列表,生成单词if not blk:continueif re_han.match(blk):for word in cut_block(blk):yield wordelse:tmp = re_skip.split(blk)for x in tmp:if re_skip.match(x):yield xelif not cut_all:for xx in x:yield xxelse:yield x
2.jieba.lcut的
源码实现:其实就是将生成器对象强转为列表
def lcut(self, *args, **kwargs):return list(self.cut(*args, **kwargs))
-
精准分词:按照人类的思维逻辑进行分词:比如
英雄联盟
是一个词精准分词的使用:
jieba.cut
/jieba.lcut
,设置参数cut_all=False
def dm01():CONTENTS = "阳光彩虹小白马,滴滴答滴滴答!"# cut_all=False 精准分词# 返回一个可迭代对象obj = jieba.cut(sentence=CONTENTS, cut_all=False)# 返回的是一个生成器对象# print(obj) # <generator object Tokenizer.cut at 0x00000294FFB2EF00># print(f'是可迭代对象吗?{isinstance(obj, Iterable)}')# print(f'是迭代器吗?{isinstance(obj, Iterator)}')print(f'分词的结果:{list(obj)}')res = jieba.lcut(CONTENTS, cut_all=False)print(f'lcut方式得到的结果:{res}')
- 全模式分词:将句子中所有可以成词的词语全部扫描出来
def dm02():CONTENTS = "阳光彩虹小白马,滴滴答滴滴答!"obj = jieba.cut(sentence=CONTENTS, cut_all=True)print(obj)words = jieba.lcut(CONTENTS, cut_all=True)print(f'全模式分词后的结果:{words}')
-
搜索引擎模式分词:在精确模式基础上对长词镜像再次切分,提高召回率,适用于搜索引擎分词
def dm03():CONTENTS = "阳光彩虹小白马,滴滴答滴滴答!"obj = jieba.cut_for_search(sentence=CONTENTS)print(obj)words = jieba.lcut_for_search(CONTENTS)print(f'搜索引擎模式分词后的结果:{words}')
-
繁体中文分词:针对中国香港, 台湾地区的繁体文本进行分词。
def dm04():content = "煩惱即是菩提,我暫且不提"words = jieba.lcut(content)print('words--->', words)
- 用户自定义词典分词
- 词典格式:一般定义在
.txt
文件中- 定义的格式:
word freq word_type
- word:词语(必填)
- freq: 词频(可选)
- word_type:词性(可选)
- 定义的格式:
- 词典格式:一般定义在
以下为示例阳光 5 n小白马 6 nz滴滴答 2
def dm05():CONTENTS = "阳光彩虹小白马,滴滴答滴滴答!"jieba.load_userdict('./data/userdict.txt')words = jieba.lcut(CONTENTS)print('words--->', words)
命名实体识别
命名实体识别(NER)是自然语言处理中的一个任务,旨在从文本中识别出特定类别的实体(如人名、地名、机构名、日期、时间等)。NER是信息抽取的一部分,帮助计算机识别出与任务相关的实体信息。
例如:
鲁迅, 浙江绍兴人, 五四新文化运动的重要参与者, 代表作朝花夕拾.==>鲁迅(人名) / 浙江绍兴(地名)人 / 五四新文化运动(专有名词) / 重要参与者 / 代表作 / 朝花夕拾(专有名词)
- 作用
- 信息抽取:NER帮助从海量的文本中自动抽取出结构化的实体信息,为数据分析、问答系统等提供有价值的内容。
- 问答系统:在智能问答系统中,NER能够帮助系统准确理解用户的提问,并提取相关的实体信息以便生成更准确的回答。
- 文本理解:NER对于文本理解至关重要,它帮助系统识别出文本中的关键信息,例如人物、地点、组织等,进而为语义分析和事件抽取提供支持。
- 处理工具
- SpaCy、NLTK、Stanford NER、BERT(通过微调)、LTP、HanLP等都可以用于命名实体识别任务。
词性标注
词性标注(Part-Of-Speech tagging, 简称POS)就是为文本中的每个词分配一个语法类别(即词性),例如名词、动词、形容词等。词性标注能够帮助模型理解词汇在句子中的语法功能,并为进一步的句法分析和语义分析提供支持。
-
类型
- 名词n:表示人、事物、地方等,例如
"中国"
,"鲁迅"
。 - 动词v:表示动作、存在等,例如
"跑"
,"吃"
。 - 形容词a:描述事物的性质或状态,例如
"大"
,"美丽"
。 - 副词d:修饰动词、形容词或其他副词,例如
"马上"
,"非常"
。 - 代词r:代替名词的词,例如
"我"
,"他们"
。
- 名词n:表示人、事物、地方等,例如
-
作用
- 理解句子结构:通过词性标注,可以知道每个词在句子中的角色,帮助理解句子的语法结构。
- 支持其他NLP任务:许多高级任务如命名实体识别(NER)、句法分析、情感分析等,通常依赖于词性标注的结果。
- 歧义消解:词性标注有助于解决同一单词在不同上下文中可能具有不同词性的情况。例如,单词 “lead” 可能是动词(引导)也可能是名词(铅),通过词性标注可以解决这种歧义。
-
处理工具
- Jieba、NLTK、SpaCy、Stanford POS Tagger等是常用的词性标注工具。
-
使用Jieba分词完成POS任务[知道]
import jieba.posseg as psegCONTENT = '我见过很多天才,但他们都叫我天才'def dm_pos():words = pseg.lcut(CONTENT)print('words->', words)name_entities = list()for word, flag in words:# r: 代词, v:动词,n:名词, ns: 地名if flag in ['r', 'v', 'n', 'ns',]:name_entities.append((word, flag))print('name_entities->', name_entities)return name_entities
相关文章:
01_NLP基础之文本处理的基本方法
自然语言处理入门 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域,主要目标是让机器能够理解和生成自然语言,这样人们可以通过语言与计算机进行更自然的互动。 …...

(十 六)趣学设计模式 之 责任链模式!
目录 一、 啥是责任链模式?二、 为什么要用责任链模式?三、 责任链模式的实现方式四、 责任链模式的优缺点五、 责任链模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...

动态规划/贪心算法
一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术,尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题,并保存这些子问题的解以避免重复计算,从而提高效率。 动态规划的核心思想 最优子结…...

PH热榜 | 2025-03-04
1. MGX 标语:第一支人工智能开发团队 介绍:MGX(MetaGPT X)是一个基于真实软件标准操作程序(SOP)的多代理人工智能平台。在这里,你可以随时与AI团队的领导、产品经理、架构师、工程师和数据分析…...
Mybatis-Plus 插件机制与自定义插件实现
1. Mybatis-Plus 插件系统概述 Mybatis-Plus 提供了一个简单而强大的插件机制,允许开发者在 MyBatis 执行 SQL 的过程中插入自定义逻辑。通过插件机制,用户可以实现对 SQL 执行过程的拦截和修改。Mybatis-Plus 插件基于 MyBatis 的拦截器模式进行实现&a…...

开源表单、投票、测评平台部署教程
填鸭表单联合宝塔面板深度定制,自宝塔面板 9.2 版本开始,在宝塔面板-软件商店中可以一键部署填鸭表单系统。 简单操作即可拥有属于自己的表单问卷系统,快速赋能业务。即使小白用户也能轻松上手。 社区版体验地址:https://demo.tduckapp.com/home 前端项目地址: tduck-fro…...

行为模式---命令模式
概念 命令模式是一种行为设计模式,它的核心思想就是将请求封装为一个对象,此对象包含与请求相关的所有信息。可以用不同的请求对客户进行参数化。命令模式通过将请求的发送者和接收者解耦,支持请求的排队、记录、撤销等操作。 使用场景 1、…...

zabbix配置邮件告警
目录 实现步骤: 实现目的: 1.在监控端操作: 2.web界面部署 实现步骤: 1、在 zabbix服务端配置邮件发送脚本和修改 zabbix服务端配置文件; 2、在 zabbix前端控制台进行相关设置。 实现目的: Zab…...
INI和CSV文件保存
INI文件 INI文件是一种配置文件格式,通常用于Windows操作系统中的应用程序中。 它是一种文本文件,由多个节和键值对组成,用于存储应用程序的配置信息。 INI文件的特点包括: INI文件是一种文本文件,易于编辑和阅读。…...

汽车智能钥匙中PKE低频天线的作用
PKE(Passive Keyless Entry)即被动式无钥匙进入系统,汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用,以下是其具体作用: 信号交互与身份认证 低频信号接收:当车主靠近车辆时…...

计算机等级考试
一、计算机等级考试——题库 (1)选择题 (2)基本操作题 (3)上网题 (4)文字题 (5)表格题 (6)演示文稿题 二、计算机等级考试——标准评…...

Geotools中获取Shapefile的属性表格字符集编码的一种方法
目录 前言 1、字符集编码的重要性 2、Geotools 在 GIS 开发中的地位 一、GeoTools的字符集知识 1、字符集的作用 2、shapefile中字符集信息 二、GeoTools中获取字符集的方法 1、默认获取 2、从DataStore中获取 3、从CPG文件中获取 4、生产字符获取实践 三、总结 前言…...

HTTP 与 HTTPS 协议:从基础到安全强化
引言 互联网的消息是如何传递的? 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议:互联网的基石 定义 HTTP(英文:HyperText Transfer Protocol,缩写:HTTP),即超文本传输协…...

Scrapy爬虫框架介绍
目录 什么是Scrapy Scrapy核心组件 Scrapy扩展组件 组件交互流程 安装Scrapy Scrapy项目目录结构说明 创建Scrapy项目 创建爬虫 运行爬虫 配置请求头 全局配置请求头 指定爬虫配置请求头 配置管道pipeline 全局配置pipeline 方式一:指定爬虫配置pipe…...
Stable Diffusion模型高清算法模型类详解
Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4,分块尺寸768px★★★★★☆皮肤纹理细腻,但高对比场景易出现…...
软考网络安全口诀
首先,我们来看第一个口诀 “防御为先,安全无小事”。这个口诀强调了网络安全中的防御意识。在软考备考过程中,我们需要深刻理解网络安全不仅仅是技术层面的问题,更是一种全面的防御思维。从网络架构设计到日常运维管理࿰…...

Baklib内容中台赋能企业智管
内容中台构建全场景智管 现代企业数字化运营中,全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构,企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例,其利用中台系统将分散在CRM、ERP及内部文档…...

vscode+vue前端开发环境配置
目录 一、安装Vue二、使用vue新建项目 一、安装Vue 在node.js安装好之后, npm config set registry https://registry.npmmirror.com# 安装vue相关工具,webpack用来项目构建、打包、资源整合等。 npm install webpack -g# 安装vue-cli脚手架 npm insta…...
Python项目-基于深度学习的校园人脸识别考勤系统
引言 随着人工智能技术的快速发展,深度学习在计算机视觉领域的应用日益广泛。人脸识别作为其中的一个重要分支,已经在安防、金融、教育等多个领域展现出巨大的应用价值。本文将详细介绍如何使用Python和深度学习技术构建一个校园人脸识别考勤系统&#…...

浅谈C++函数特性
C的函数特性 前言 在C中,函数加入了许多特性,例如:a、函数缺省参数 b、函数重载 c、内联函数 等等……,这里我会和大家详细去探讨这些特性。以及探讨这些特性的一些细节,同时在内联部分,我们还会把C语言的…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...