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语言的…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...