文本预处理:数据清洗与标准化

在自然语言处理(NLP)的旅程中,文本预处理是至关重要的第一步。原始文本数据往往包含噪声、不一致性以及各种格式问题,直接影响后续模型的性能。文本预处理旨在将文本转化为统一、规范的格式,便于计算机理解和处理。

1. 文本清洗

文本清洗涉及去除无关字符、标点符号、数字、HTML标签等。例如,使用Python的re库进行正则表达式匹配,可以有效移除不需要的字符。

import redef clean_text(text):# 移除HTML标签text = re.sub(r'<.*?>', '', text)# 移除非字母字符text = re.sub(r'[^a-zA-Z\s]', '', text)# 转换为小写text = text.lower()return textsample_text = "<p>Hello, World! 123</p>"
cleaned_text = clean_text(sample_text)
print(cleaned_text)  # 输出: hello world
2. 分词与词干提取

分词是将连续文本分割成单词或术语的过程。对于英文,可以使用nltk库的word_tokenize函数。词干提取则是将词汇还原为其基本形式,如将“running”转换为“run”。

from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmerdef tokenize_and_stem(text):tokens = word_tokenize(text)stemmer = PorterStemmer()stems = [stemmer.stem(token) for token in tokens]return stemstokens = tokenize_and_stem("running quickly")
print(tokens)  # 输出: ['run', 'quickli']
3. 停用词过滤

停用词是指在文本处理中常被忽略的高频词汇,如“the”、“is”等。过滤停用词可以减少数据维度,提高处理效率。

from nltk.corpus import stopwordsdef remove_stopwords(tokens):stop_words = set(stopwords.words('english'))filtered_tokens = [token for token in tokens if token not in stop_words]return filtered_tokensfiltered_tokens = remove_stopwords(tokens)
print(filtered_tokens)  # 输出: ['run', 'quickli']

词向量表示:从文本到数值空间

为了使计算机能够处理文本数据,需要将文本转换为数值形式。词向量表示是一种将词语映射到多维空间的方法,其中每个词由一个实数向量表示,向量之间的距离反映了词之间的语义相似度。

1. 词袋模型(Bag of Words)

词袋模型是一种简单且广泛使用的文本表示方法,它忽略了文本中的顺序和语法结构,仅考虑词汇的出现频率。

from sklearn.feature_extraction.text import CountVectorizerdocuments = ["I love programming", "Python is awesome"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
print(X.toarray())
# 输出: [[0 1 1] [1 0 1]] 对应词汇表 ['awesome', 'programming', 'python']
2. TF-IDF加权

TF-IDF(Term Frequency-Inverse Document Frequency)是一种统计方法,用于评估一个词语对于一个文档集或一个语料库中的其中一份文档的重要程度。

from sklearn.feature_extraction.text import TfidfVectorizertfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(documents)
print(X_tfidf.toarray())
# 输出: TF-IDF权重矩阵,反映每个词在文档中的重要性
3. Word2Vec与GloVe

Word2Vec和GloVe是两种流行的词嵌入技术,它们能够捕捉词语之间的语义关系。Word2Vec通过神经网络训练得到词向量,而GloVe则基于全局词共现统计信息。

from gensim.models import Word2Vecsentences = [["i", "love", "programming"], ["python", "is", "awesome"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
word_vector = model.wv['programming']
print(word_vector)  # 输出: 100维的词向量

文本分类:情感分析实战

文本分类是NLP中的一个重要任务,它涉及将文本分配到预定义的类别中。情感分析作为文本分类的一个典型应用,旨在判断文本的情感倾向(正面、负面或中性)。

1. 数据集准备与探索

以IMDb电影评论数据集为例,该数据集包含大量带标签的电影评论,适合用于训练情感分析模型。

import pandas as pd# 假设已下载并解压IMDb数据集
df = pd.read_csv('imdb_reviews.csv')
print(df.head())
# 输出: 包含评论文本和相应情感标签的数据框
2. 数据预处理与特征提取

对评论文本进行预处理,包括清洗、分词、去除停用词等步骤,然后使用TF-IDF向量化文本。

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer# 数据清洗函数(前文已定义)
df['cleaned_text'] = df['review'].apply(clean_text)# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(df['cleaned_text'], df['sentiment'], test_size=0.2, random_state=42)# 特征提取
tfidf = TfidfVectorizer(max_features=5000)
X_train_tfidf = tfidf.fit_transform(X_train)
X_test_tfidf = tfidf.transform(X_test)
3. 模型训练与评估

使用逻辑回归模型进行训练,并评估其在测试集上的表现。

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report# 模型训练
model = LogisticRegression()
model.fit(X_train_tfidf, y_train)# 预测与评估
y_pred = model.predict(X_test_tfidf)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
print(classification_report(y_test, y_pred))

命名实体识别(NER):提取关键信息

命名实体识别(NER)是NLP中的一项任务,旨在从文本中识别出具有特定意义的实体,如人名、地名、组织机构名等。这对于信息提取、知识图谱构建等应用至关重要。

1. 使用预训练模型进行NER

利用spaCy库提供的预训练模型,可以方便地进行命名实体识别。

import spacy# 加载预训练模型
nlp = spacy.load('en_core_web_sm')# 处理文本
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for ent in doc.ents:print(ent.text, ent.start_char, ent.end_char, ent.label_)
# 输出: Apple 0 5 ORG, U.K. 25 28 GPE, $1 billion 36 46 MONEY
2. 自定义NER模型训练

对于特定领域的NER任务,可能需要训练自定义模型。以下是使用spaCy进行自定义NER的示例。

from spacy.training import Example
from spacy.util import minibatch, compounding# 准备训练数据(标注的实体)
TRAINING_DATA = [("Barack Obama was born in Hawaii.", {'entities': [(0, 12, 'PERSON')]}),# 更多标注数据...
]# 创建空白模型
nlp = spacy.blank('en')
ner = nlp.create_pipe('ner')
nlp.add_pipe(ner)# 添加标注数据到模型
for _, annotations in TRAINING_DATA:for ent in annotations['entities']:ner.add_label(ent[2])# 训练模型
optimizer = nlp.begin_training()
for itn in range(10):random.shuffle(TRAINING_DATA)losses = {}for text, annotations in TRAINING_DATA:doc = nlp.make_doc(text)example = Example.from_dict(doc, annotations)nlp.update([example], drop=0.5)print(f'Loss after iteration {itn}: {losses}')

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

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

相关文章

ECMAScript(简称 ES)和 JavaScript 的关系

ECMAScript&#xff08;简称ES&#xff09;和JavaScript的关系常常令人困惑。简单来说&#xff1a;ECMAScript是标准&#xff0c;JavaScript是实现。以下从多个维度详细解析它们的区别与联系&#xff1a; 一、定义与核心关系ECMAScript 标准化规范&#xff1a;由ECMA国际&#…

笔试——Day16

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码优化&#xff08;滑动窗口&#xff09;第一题 题目 字符串替换 思路 模拟 当遍历到正常字符时&#xff0c;直接加入结果答案&#xff1b;当遍历到占位符时&#xff0c;按顺序使用arg…

第十四届蓝桥杯青少Scratch国赛真题——太空大战

明天蓝桥杯大赛青少组省赛报名就开始报名了&#xff0c;小伙伴们记得设好闹钟&#xff0c;去抢报呀~&#xff08;去年是名额有限&#xff0c;全靠抢&#xff0c;今年估计也是&#xff0c;大家伙记得快点报名就对了&#xff09;报名通道将于&#x1f4c5;2025年7月23日13&#x…

小玩 Lifecycle

导包 [versions] lifecycle_version "2.3.1"[libraries] androidx-viewmodel { group "androidx.lifecycle", name "lifecycle-viewmodel-ktx", version.ref "lifecycle_version" } androidx-livedata { group "androidx…

HttpSecurity详解

HttpSecurity 是 Spring Security 中用于配置 HTTP 安全性的核心类。它允许你定义各种安全规则和过滤器,以保护 Web 应用程序中的不同 URL 和请求。下面是对 HttpSecurity 中常见配置的详细解析,以及每个配置的意义。 1. csrf 配置: http.csrf(customizers -> customi…

FFmpeg+javacpp中仿ffplay播放

FFmpegjavacpp中仿ffplay播放1、[ffplay 基于 SDL 和 FFmpeg 库的简单媒体播放器](https://ffmpeg.org/ffplay.html)2、FFmpeg帧捕获器 : FFmpegFrameGrabber2.1 grabSamples()2.2 grabImage()2.3 grab() 获取音视频帧FFmpegjavacppjavacv使用 ffmpeg-6.0\fftools\ffplay.c 1、…

【后端】 FastAPI

&#x1f680; FastAPI 是什么&#xff1f;FastAPI 是一个用于构建 Web API 的 Python 框架。可以理解成&#xff1a;&#x1f9f0; “一个工具箱&#xff0c;让你用 Python 写出能被浏览器、App、小程序调用的接口&#xff08;API&#xff09;。”&#x1f527; 那什么是 API&…

不画一张架构图讲透架构思维

&#x1f449;目录1 架构的定义2 架构是为了解无解的问题-分工3 抱残守缺的好架构应该是怎样的4 适可而止的设计、恰如其分的架构与成败论英雄本文深入探讨软件架构的本质与设计方法论&#xff0c;从架构定义演变到现代架构实践挑战&#xff0c;系统分析架构设计面临的业务复杂…

SpringCloudGateWay 使用nacos网关自动负载均衡

安装好nacos后&#xff08;参考以前文章SpringCloud 使用nacos注册服务&#xff0c;使用openFeign调用服务-CSDN博客&#xff09; 新建一个项目&#xff0c;添加 spring-cloud-starter-gateway-server-webmvc spring-cloud-loadbalancer spring-cloud-starter-alibaba-nacos-d…

Hiredis 构建 Redis 命令实战指南

一、同步命令构造 1.1 redisCommand(fmt, …) 最常用的同步接口即 redisCommand&#xff0c;其原型如下&#xff1a; void *redisCommand(redisContext *c, const char *format, ...);参数 c&#xff1a;已连接的 redisContext*format&#xff1a;与 printf 类似的格式字符串//…

【数据库】国产数据库的新机遇:电科金仓以融合技术同步全球竞争

7月15日&#xff0c;国产数据库厂商中电科金仓&#xff08;北京&#xff09;科技股份有限公司&#xff08;以下简称“电科金仓”&#xff09;在北京举行了一场技术发布会&#xff0c;集中发布四款核心产品&#xff1a;AI时代的融合数据库KES V9 2025、企业级统一管控平台KEMCC、…

大模型 Function Call 的实现步骤及示例详解

大模型 Function Call 的实现步骤及示例详解一、Function Call的核心流程拆解二、结合代码详解Function Call实现步骤1&#xff1a;定义工具&#xff08;对应代码中的tools列表&#xff09;步骤2&#xff1a;实现工具函数&#xff08;对应代码中的get_current_weather和get_cur…

Linux运维新手的修炼手扎之第24天

mysql服务1 mysql命令客户端(mysql.cnf)命令 \c--ctrl c \s--显示当前状态 \r--客户端重新连接 \h--查看帮助信息 exit退出客户端 \G--垂直格式显示查询结果连接MySQL服务器--[rootrocky9 ~]# mysql(mysql -u用户名 - p密码 -h服务端ip -P服务端port -S服务端sock -e "my…

面向对象分析与设计40讲(7)设计原则之合成复用原则

文章目录 一、概念 二、示例(C++ 实现) 1. 违反合成复用原则的示例(过度使用继承) 2. 遵循合成复用原则的示例(使用组合) 三、总结 1. 继承是“强绑定”,组合是“弱关联” 2. 继承固化“静态结构”,组合支持“动态变化” 3. 继承放大“设计缺陷”,组合隔离“局部问题”…

Git 完全手册:从入门到团队协作实战(4)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《C修炼之路》、《Linux修炼&#xff1a;终端之内 洞悉真理…

解决Spring事务中RPC调用无法回滚的问题

文章目录问题分析解决方案实现原理解析执行流程说明运行实例正常流程执行执行异常流程关键优势在分布式系统开发中&#xff0c;我们经常会遇到本地事务与远程服务调用结合的场景。当本地事务包含RPC调用时&#xff0c;如果事务回滚&#xff0c;RPC调用已经执行就会导致数据不一…

sqli-labs通关笔记-第13关 POST报错型注入(单引号括号闭合 手工注入+脚本注入两种方法)

目录 一、字符型注入 二、limit函数 三、GET方法与POST方法 四、源码分析 1、代码审计 2、SQL注入安全分析 3、报错型注入与联合注入 五、渗透实战 1、进入靶场 2、注入点分析 &#xff08;1&#xff09;SQL语句 &#xff08;2&#xff09;admin) #注入探测 &…

康复器材动静态性能测试台:精准检测,为康复器械安全保驾护航

在康复医疗领域&#xff0c;无论是轮椅、拐杖、假肢还是康复床&#xff0c;每一件器械的强度与稳定性都直接关系到使用者的安全与康复效果。如何确保这些器械在实际使用中经得起反复考验&#xff1f;Delta德尔塔仪器推出的康复器材动静态性能测试台&#xff0c;凭借其高精度、智…

vue3中el-table表头筛选

效果如下&#xff0c;可以勾选表头进行隐藏&#xff0c;也可以对表头进行拖动排序index主界面 <script> let tempHead []; const showFilter ref<boolean>(false); let tableHeadList ref<TableHeadItem[]>([{ prop: "displayId", label: "…

数据结构 之 【排序】(直接选择排序、堆排序、冒泡排序)

目录 1.直接选择排序 1.1直接选择排序的思想 1.2直接选择排序的代码逻辑 1.3完整排序代码 1.3.1一次只选一个最值 1.3.2一次筛选出两个最值 1.4直接选择排序的时间复杂度与空间复杂度 2.堆排序 2.1堆排序的思想 2.2堆排序的具体步骤 2.3堆排序图解 2.4完整排序代码…