运用词向量模型分辨评论

代码实现:

import jieba
import pandas as pd
hp = pd.read_table('优质评价.txt',encoding='gbk')
cp = pd.read_table('差评1.txt',encoding='gbk')
cp_segments = []
contents = cp.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results)>1:cp_segments.append(results)
cp_fc_results = pd.DataFrame({'content':cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)
hp_segments = []
contents = hp.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results)>1:hp_segments.append(results)
hp_fc_results = pd.DataFrame({'content':hp_segments})
hp_fc_results.to_excel('hp_fc_results.xlsx',index=False)
stopwords = pd.read_csv('StopwordsCN.txt',encoding='utf-8',engine='python',on_bad_lines='skip')
def drop_stopwords(contents,stopwords):segments_clean=[]for content in contents:line_clean = []for word in content:if word in stopwords:continueline_clean.append(word)segments_clean.append(line_clean)return segments_clean
contents = cp_fc_results.content.values.tolist()
stopwords = stopwords.stopword.values.tolist()
cp_fc_clean = drop_stopwords(contents,stopwords)
# print(cp_fc_clean)
contents = hp_fc_results.content.values.tolist()
hp_fc_clean = drop_stopwords(contents,stopwords)
# print(hp_fc_clean)
cp_train=pd.DataFrame({'segments_clean':cp_fc_clean, 'label':1})
hp_train=pd.DataFrame({'segments_clean':hp_fc_clean, 'label':0})
pj_train = pd.concat([cp_train,hp_train])
pj_train.to_excel('pj_train.xlsx',index=False)
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from imblearn.over_sampling import SMOTE
all_words = []
for seg in pj_train['segments_clean'].values:all_words.append(' '.join(seg))
vec = CountVectorizer(max_features=5000, lowercase=False, ngram_range=(1,3))
all_vec = vec.fit_transform(all_words)
all_labels = pj_train['label'].values
smote = SMOTE(random_state=42)
all_vec_resampled, all_labels_resampled = smote.fit_resample(all_vec, all_labels)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(all_vec_resampled,all_labels_resampled,test_size=0.2,random_state=0)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB(alpha=0.1)
classifier.fit(x_train, y_train)
from sklearn import metrics
print("\n过采样后的训练集评估 ")
train_pr = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_pr))
print("\n过采样后的测试集评估")
test_pr = classifier.predict(x_test)
print(metrics.classification_report(y_test, test_pr))
s = '这个玩意真好,我很喜欢'
s_seg = jieba.lcut(s)
s_seg_clean = []
for word in s_seg:if word  in stopwords:continues_seg_clean.append(word)
s_words = [' '.join(s_seg_clean)]
s_vec = vec.transform(s_words)
predicted = classifier.predict(s_vec)
if predicted[0] == 0:print('这段话是好评')
else :print('这段话是差评')

代码解析:

这段代码实现了一个基于机器学习的文本情感分析系统,能够区分文本是好评还是差评。整个流程涵盖了数据加载、文本预处理、特征工程、模型训练和预测评估等完整环节。

一、数据加载与预处理

1. 导入必要库

import jiebaimport pandas as pd

jieba:中文分词库,用于将中文文本拆分为词语

pandas:数据处理库,用于数据读取、转换和存储

2. 加载评论文本数据

hp = pd.read_table('优质评价.txt',encoding='gbk')cp = pd.read_table('差评1.txt',encoding='gbk')

从本地文件加载好评和差评数据

使用gbk编码读取文本文件,适应中文编码格式

3. 文本分词处理

# 差评分词cp_segments = []contents = cp.content.values.tolist()for content in contents:results = jieba.lcut(content) # 精确分词if len(results)>1: # 过滤过短文本cp_segments.append(results)cp_fc_results = pd.DataFrame({'content':cp_segments})cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)# 好评分词(与差评处理逻辑相同)hp_segments = []contents = hp.content.values.tolist()for content in contents:results = jieba.lcut(content)if len(results)>1:hp_segments.append(results)hp_fc_results = pd.DataFrame({'content':hp_segments})hp_fc_results.to_excel('hp_fc_results.xlsx',index=False)

将文本内容转换为列表形式便于处理

使用jieba.lcut()进行中文分词

过滤长度过短的文本,避免无意义数据

将分词结果保存为 Excel 文件,便于后续分析

二、停用词处理

1. 加载停用词表

stopwords = pd.read_csv('StopwordsCN.txt',encoding='utf-8',engine='python',on_bad_lines='skip')

加载中文停用词表(如 "的"、"是"、"在" 等无实际意义的词)

设置on_bad_lines='skip'跳过格式错误的行

2. 定义停用词过滤函数

def drop_stopwords(contents,stopwords):segments_clean=[]for content in contents:line_clean = []for word in content:if word in stopwords: # 如果是停用词则跳过continueline_clean.append(word)segments_clean.append(line_clean)return segments_clean

遍历每个分词结果

过滤掉属于停用词表中的词语

返回清洗后的分词结果

3. 执行停用词过滤

# 处理差评数据contents = cp_fc_results.content.values.tolist()stopwords = stopwords.stopword.values.tolist()cp_fc_clean = drop_stopwords(contents,stopwords)# 处理好评数据contents = hp_fc_results.content.values.tolist()hp_fc_clean = drop_stopwords(contents,stopwords)

将 DataFrame 中的分词结果转换为列表

将停用词表转换为列表便于查找

对好评和差评数据分别进行停用词过滤

三、数据集构建

# 构建带标签的训练数据cp_train=pd.DataFrame({'segments_clean':cp_fc_clean, 'label':1}) # 差评标签为1hp_train=pd.DataFrame({'segments_clean':hp_fc_clean, 'label':0}) # 好评标签为0pj_train = pd.concat([cp_train,hp_train]) # 合并正负样本pj_train.to_excel('pj_train.xlsx',index=False) # 保存训练数据

为不同情感的文本添加标签(1 表示差评,0 表示好评)

使用pd.concat()合并好评和差评数据

保存合并后的训练数据集

四、特征工程

1. 文本特征向量化

from sklearn.feature_extraction.text import CountVectorizer# 将分词列表转换为字符串all_words = []for seg in pj_train['segments_clean'].values:all_words.append(' '.join(seg))# 构建词袋模型vec = CountVectorizer(max_features=5000, lowercase=False, ngram_range=(1,3))all_vec = vec.fit_transform(all_words)

CountVectorizer:将文本转换为词频特征向量

max_features=5000:保留出现频率最高的 5000 个词

lowercase=False:不将文本转换为小写(中文无需此操作)

ngram_range=(1,3):考虑 1-3 个词的组合特征(如 "性价比"、"非常好" 等)

fit_transform():拟合模型并将文本转换为特征向量

2. 处理类别不平衡问题

from imblearn.over_sampling import SMOTEall_labels = pj_train['label'].values # 获取标签smote = SMOTE(random_state=42) # 初始化SMOTE过采样器all_vec_resampled, all_labels_resampled = smote.fit_resample(all_vec, all_labels)

SMOTE:一种过采样技术,用于解决类别不平衡问题

通过生成少数类别的合成样本,使正负样本比例平衡

random_state=42:设置随机种子,保证结果可复现

五、模型训练与评估

1. 划分训练集和测试集

from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(all_vec_resampled, all_labels_resampled,test_size=0.2, random_state=0)

将数据集划分为训练集(80%)和测试集(20%)

random_state=0:固定随机种子,确保划分结果一致

2. 训练朴素贝叶斯模型

from sklearn.naive_bayes import MultinomialNBclassifier = MultinomialNB(alpha=0.1) # 初始化多项式朴素贝叶斯模型classifier.fit(x_train, y_train) # 训练模型

MultinomialNB:适用于离散特征的朴素贝叶斯分类器,常用于文本分类

alpha=0.1:添加平滑参数,避免零概率问题

3. 模型评估

from sklearn import metricsprint("\n过采样后的训练集评估 ")train_pr = classifier.predict(x_train)print(metrics.classification_report(y_train, train_pr))print("\n过采样后的测试集评估")test_pr = classifier.predict(x_test)print(metrics.classification_report(y_test, test_pr))

使用classification_report生成详细评估指标

包括精确率(precision)、召回率(recall)、F1 分数等

分别评估模型在训练集和测试集上的表现

六、实际预测应用

# 待预测文本s = '这个玩意真好,我很喜欢'# 文本预处理(与训练数据处理保持一致)s_seg = jieba.lcut(s) # 分词s_seg_clean = []for word in s_seg:if word in stopwords: # 过滤停用词continues_seg_clean.append(word)s_words = [' '.join(s_seg_clean)] # 转换为字符串# 特征转换与预测s_vec = vec.transform(s_words) # 使用训练好的向量器转换predicted = classifier.predict(s_vec) # 预测# 输出结果if predicted[0] == 0:print('这段话是好评')else :print('这段话是差评')

对新文本进行与训练数据相同的预处理(分词、去停用词)

使用训练好的CountVectorizer进行特征转换

利用训练好的模型进行情感预测

根据预测结果输出对应的情感标签

总结

这段代码完整实现了一个中文文本情感分析系统,核心流程包括:

文本数据加载与分词处理

停用词过滤净化文本

构建带标签的训练数据集

文本特征向量化与类别平衡处理

朴素贝叶斯模型训练与评估

实际文本情感预测应用

通过这个流程,我们可以将非结构化的文本数据转换为机器学习模型可处理的结构化数据,最终实现对中文文本情感的自动分类。

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

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

相关文章

基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享

基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享 一、业务场景描述 在现代电商平台中,实时用户行为数据(点击、浏览、购物车操作等)对业务决策、个性化推荐和风控都至关重要。我们需要搭建一个高吞吐、低延迟且具备高可用性的…

第二十四天:虚函数与纯虚函数

虚函数(Virtual Function) 定义:在基类中使用 virtual 关键字声明的成员函数,允许在派生类中被重新定义(覆盖,override)。其目的是实现多态性,即通过基类指针或引用调用函数时&#…

uniapp微信小程序-登录页面验证码的实现(springboot+vue前后端分离)EasyCaptcha验证码 超详细

一、项目技术栈登录页面暂时涉及到的技术栈如下:前端 Vue2 Element UI Axios,后端 Spring Boot 2 MyBatis MySQL Redis EasyCaptcha JWT Maven后端使用IntelliJ IDEA 2024.3.5 前端使用 HBuilder X 和 微信开发者工具二、实现功能及效果图过期管理验证码有…

【Java】HashMap的详细介绍

目录 一.HashMap 1.基本概念 2.底层数据结构: 3.HashCode和equals方法 为什么重写HashCode方法? 为什么重新equals方法? 4.put操作 1.初始化和数组检查 2.计算索引并检查桶是否为空 3.桶不为null,处理哈希冲突 4.判断链…

nifi 增量处理组件

在Apache NiFi中,QueryDatabaseTable 是一个常用的处理器,主要用于从关系型数据库表中增量查询数据,特别适合需要定期抽取新增或更新数据的场景(如数据同步、ETL流程)。它的核心功能是通过跟踪指定列的最大值&#xff…

【数据可视化-90】2023 年城镇居民人均收入可视化分析:Python + pyecharts打造炫酷暗黑主题大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Multiverse模型:突破多任务处理和硬件效率瓶颈的AI创新(上)

随着人工智能技术的快速发展,多模态模型成为了当前研究的热点。多模态模型的核心思想是能够同时处理和理解来自不同模态(如文本、图像、音频等)的数据,从而为模型提供更加全面的语境理解和更强的泛化能力。 杨新宇,卡…

OpenCV 高斯模糊降噪

# 高斯模糊处理(降噪) # 参数1: 原始图像 # 参数2: 高斯核尺寸(宽,高,必须为正奇数) # 其他模糊方法: # - cv.blur(): 均值模糊 # - cv.medianBlur(): 中值模糊 # - cv.bilateralFilter(): 双边滤波 blur cv.GaussianBlur(img, (7,7), cv…

常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC

在现代网络通信中,各种协议扮演着至关重要的角色,它们决定了数据如何在网络中传输、控制其可靠性、实时性与适用场景。对于开发者而言,理解这些常见的通信协议,不仅有助于更好地设计系统架构,还能在面对不同业务需求时…

深入解析MPLS网络中的路由器角色

一、 MPLS概述:标签交换的艺术 在深入角色之前,我们首先要理解MPLS的核心思想。传统IP路由是逐跳进行的,每一台路由器都需要对数据包的目的IP地址进行复杂的路由表查找(最长匹配原则),这在网络核心层会造成…

AI的拜师学艺,模型蒸馏技术

AI的拜师学艺,模型蒸馏技术什么是模型蒸馏,模型蒸馏是一种高效的模型压缩与知识转移方法,通过将大型教师模型的知识精炼至小型学生模型,让学生模型模仿教师模型的行为和内化其知识,在保持模型性能的同时降低资源消耗。…

Python爬虫从入门到精通(理论与实践)

目录 1. 爬虫的魅力:从好奇心到数据宝藏 1.1 爬虫的基本流程 1.2 准备你的工具箱 2. 第一个爬虫:抓取网页标题和链接 2.1 代码实战:用requests和BeautifulSoup 2.2 代码解析 2.3 遇到问题怎么办? 3. 进阶爬取:结构化数据抓取 3.1 分析网页结构 3.2 代码实战:抓取…

【DDIA】第三部分:衍生数据

1. 章节介绍 本章节是《设计数据密集型应用》的第三部分,聚焦于多数据系统集成问题。前两部分探讨了分布式数据库的基础内容,但假设应用仅用一种数据库,而现实中大型应用常需组合多种数据组件。本部分旨在研究不同数据系统集成时的问题&#…

Spring配置线程池开启异步任务

一、单纯使用Async注解。1、Async注解在使用时,如果不指定线程池的名称,则使用Spring默认的线程池,Spring默认的线程池为SimpleAsyncTaskExecutor。2、方法上一旦标记了这个Async注解,当其它线程调用这个方法时,就会开…

AI数据仓库优化数据管理

内容概要AI数据仓库代表了现代企业数据管理的重大演进,它超越了传统数据仓库的范畴。其核心在于利用人工智能技术,特别是机器学习和深度学习算法,来智能化地处理从多源数据整合到最终价值提取的全过程。这种新型仓库不仅能高效地统一存储来自…

SpringMVC(详细版从入门到精通)未完

SpringMVC介绍 MVC模型 MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。 View(视图…

vue3运行机制同tkinter做类比

把刚才“Vue3 盖别墅”的故事,和 Python 的 tkinter 做一个“一一对应”的翻译,你就能瞬间明白两件事的异同。 为了直观,用同一栋房子比喻: Vue3 的“网页” ⇄ tkinter 的“桌面窗口”浏览器 ⇄ Python 解释器 Tcl/Tk 引擎 下面…

Fastadmin后台列表导出到表格

html中添加按钮<a href"javascript:;" class"btn btn-success btn-export" title"{:__(导出数据)}" ><i class"fa fa-cloud-download"></i> {:__(导出数据)}</a>对应的js添加代码处理点击事件&#xff0c;添加…

Nginx反向代理与缓存实现

1. Nginx反向代理核心配置解析 1.1 反向代理基础配置结构 Nginx反向代理的基础配置结构主要包括server块和location块的配置。一个典型的反向代理配置示例如下&#xff1a; server {listen 80;server_name example.com;location / {proxy_pass http://backend_servers;proxy_se…

第2节 如何计算神经网络的参数:AI入门核心逻辑详解

🎯 核心目标:找到最佳w和b! 上期咱们聊了神经网络就是复杂的"线性变换+激活函数套娃",今天的重头戏就是:怎么算出让模型完美拟合数据的w(权重)和b(偏置)!先从最简单的线性函数说起,一步步揭开神秘面纱 那么如何计算w和b呢?首先明确我们需要的w和b能够让…