自然语言处理NLP 04案例——苏宁易购优质评论与差评分析

  上一篇文章,我们爬取了苏宁易购平台某产品的优质评价和差评,今天我们对优质评价与差评进行分析

selenium爬取苏宁易购平台某产品的评论-CSDN博客

目录

1. 数据加载

2. 中文分词

3. 停用词处理

4. 数据标注与合并

5. 数据集划分

6. 文本特征提取

7. 模型训练与评估

MultinomialNB(多项式朴素贝叶斯)

ComplementNB(补充朴素贝叶斯)

BernoulliNB(伯努利朴素贝叶斯)

完整代码

运行结果

结果如何解读:


1. 数据加载

c_content = pd.read_table(r'.\差评(1).txt', encoding='gbk')
h_content = pd.read_table(r'.\优质评价.txt', encoding='gbk')
  • 功能:从本地读取两个文本文件,分别是差评数据 (差评(1).txt) 和优质评价数据 (优质评价.txt),并使用 gbk 编码加载为 Pandas DataFrame。

  • 说明pd.read_table 用于读取以制表符分隔的文本文件。

2. 中文分词

import jieba
c_segments = []
contents = c_content.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results) > 1:c_segments.append(results)
  • 功能:对差评数据进行中文分词,使用 jieba.lcut 将每一条评论分割成词语列表。

  • 说明

    • jieba.lcut 是结巴分词库的函数,用于将中文句子切分为词语列表。

    • if len(results) > 1 过滤掉分词结果中长度小于等于 1 的无效数据。


c_f_results = pd.DataFrame({'content': c_segments})
c_f_results.to_excel('c_f_results.xlsx', index=False)
  • 功能:将分词后的差评数据保存到 Excel 文件 (c_f_results.xlsx) 中。

  • 说明pd.DataFrame 将分词结果转换为 DataFrame,to_excel 用于保存为 Excel 文件。


h_segments = []
contents = h_content.content.values.tolist()
for content in contents:results = jieba.lcut(content)if len(results) > 1:h_segments.append(results)
​
h_f_results = pd.DataFrame({'content': h_segments})
h_f_results.to_excel('h_f_results.xlsx', index=False)
  • 功能:对优质评价数据进行中文分词,并保存到 Excel 文件 (h_f_results.xlsx) 中。

  • 说明:与差评数据处理流程相同。

3. 停用词处理

stopwords = pd.read_csv(r'..\TF_IDF\StopwordsCN.txt', encoding='utf8', engine='python', index_col=False)
  • 功能:加载中文停用词表 (StopwordsCN.txt),用于过滤分词结果中的无意义词语。

  • 说明:停用词表是一个包含常见无意义词语(如“的”、“是”等)的文件。


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
  • 功能:定义一个函数 drop_stopwords,用于从分词结果中移除停用词。

  • 说明

    • 遍历每条分词结果,过滤掉停用词表中的词语。

    • 返回清理后的分词结果。


contents = c_f_results.content.values.tolist()
stopwords = stopwords.stopword.values.tolist()
c_f_contents_clean_s = drop_stopwords(contents, stopwords)
  • 功能:对差评分词结果进行停用词过滤。

  • 说明:调用 drop_stopwords 函数,清理差评数据中的停用词。


contents = h_f_results.content.values.tolist()
h_f_contents_clean_s = drop_stopwords(contents, stopwords)
  • 功能:对优质评价分词结果进行停用词过滤。

  • 说明:与差评数据处理流程相同。

4. 数据标注与合并

c_train = pd.DataFrame({'segments_clean': c_f_contents_clean_s, 'label': 1})
h_train = pd.DataFrame({'segments_clean': h_f_contents_clean_s, 'label': 0})
pj_train = pd.concat([c_train, h_train])
pj_train.to_excel('pj_train.xlsx', index=False)
  • 功能:将差评和优质评价数据合并,并为每条数据打上标签(差评为 1,优质评价为 0)。

  • 说明:

    label: 1 表示差评,label: 0 表示优质评价。

5. 数据集划分

from sklearn.model_selection import train_test_split
​
x_train, x_test, y_train, y_test = train_test_split(pj_train['segments_clean'].values,pj_train['label'].values, test_size=0.2, random_state=48)
  • 功能:将数据集划分为训练集和测试集,测试集占 20%,训练集占 80%。

  • 说明

    • x_trainx_test 是分词后的文本数据。

    • y_trainy_test 是对应的标签数据。

    • random_state=48 确保每次划分的结果一致。


words = []
for line_index in range(len(x_train)):words.append(' '.join(x_train[line_index]))
  • 功能:将训练集的文本数据转换为以空格分隔的字符串列表。

  • 说明

    ' '.join(x_train[line_index]) 将分词列表拼接为一个字符串。


words2 = []
for line_index in range(len(x_test)):words2.append(' '.join(x_test[line_index]))
 
  • 功能:将测试集的文本数据转换为以空格分隔的字符串列表。

  • 说明:与训练集处理方式相同。


6. 文本特征提取

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(max_features=4000, lowercase=False, ngram_range=(1, 3))
vec.fit(words)
vec.fit(words2)
  • 功能:使用 CountVectorizer 将文本数据转换为特征向量。

  • 说明:

    • max_features=4000 限制特征向量的最大维度为 4000。

    • lowercase=False 不将文本转换为小写(适用于中文)。

    • ngram_range=(1, 3) 提取 1 元、2 元和 3 元语法特征。


7. 模型训练与评估

这里提供了三种贝叶斯模型供大家参考,在下面完整的代码中我将选择多项式朴素贝叶斯模型训练

MultinomialNB(多项式朴素贝叶斯)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB(alpha=0.1)
classifier.fit(vec.transform(words), y_train)
train_pr = classifier.predict(vec.transform(words))
test_pr = classifier.predict(vec.transform(words2))
​
from sklearn import metrics
print(metrics.classification_report(y_train, train_pr))
print(metrics.classification_report(y_test, test_pr))
  • 功能:使用多项式朴素贝叶斯模型进行训练和预测,并输出分类报告。

  • 说明:

    • alpha=0.1 是平滑参数,用于防止概率为零的情况。

    • metrics.classification_report 输出模型的精确率、召回率和 F1 分数。


ComplementNB(补充朴素贝叶斯)
from sklearn.naive_bayes import ComplementNB
classifier = ComplementNB(alpha=0.1)
classifier.fit(vec.transform(words), y_train)
train_pr = classifier.predict(vec.transform(words))
test_pr = classifier.predict(vec.transform(words2))
​
from sklearn import metrics
print(metrics.classification_report(y_train, train_pr))
print(metrics.classification_report(y_test, test_pr))
  • 功能:使用补充朴素贝叶斯模型进行训练和预测,并输出分类报告。

  • 说明:补充朴素贝叶斯适用于不平衡数据集。


BernoulliNB(伯努利朴素贝叶斯)
from sklearn.naive_bayes import BernoulliNB
classifier = BernoulliNB(alpha=0.1)
classifier.fit(vec.transform(words), y_train)
train_pr = classifier.predict(vec.transform(words))
test_pr = classifier.predict(vec.transform(words2))
​
from sklearn import metrics
print(metrics.classification_report(y_train, train_pr))
print(metrics.classification_report(y_test, test_pr))
  • 功能:使用伯努利朴素贝叶斯模型进行训练和预测,并输出分类报告。

  • 说明:伯努利朴素贝叶斯适用于二值特征数据。

完整代码

import pandas as pd
​
c_content=pd.read_table(r'.\差评(1).txt',encoding='gbk')
h_content=pd.read_table(r'.\优质评价.txt',encoding='gbk')
​
import jieba
c_segments=[]
contents=c_content.content.values.tolist()
for content in contents:results=jieba.lcut(content)if len(results)>1:c_segments.append(results)
​
c_f_results=pd.DataFrame({'content':c_segments})
c_f_results.to_excel('c_f_results.xlsx',index=False)
​
h_segments=[]
contents=h_content.content.values.tolist()
for content in contents:results=jieba.lcut(content)if len(results)>1:h_segments.append(results)
​
h_f_results=pd.DataFrame({'content':h_segments})
h_f_results.to_excel('h_f_results.xlsx',index=False)
​
stopwords=pd.read_csv(r'..\TF_IDF\StopwordsCN.txt',encoding='utf8',engine='python',index_col=False)
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=c_f_results.content.values.tolist()
stopwords=stopwords.stopword.values.tolist()
c_f_contents_clean_s=drop_stopwords(contents,stopwords)
​
contents=h_f_results.content.values.tolist()
# stopwords=stopwords.stopword.values.tolist()
h_f_contents_clean_s=drop_stopwords(contents,stopwords)
​
c_train=pd.DataFrame({'segments_clean':c_f_contents_clean_s,'label':1})
h_train=pd.DataFrame({'segments_clean':h_f_contents_clean_s,'label':0})
pj_train=pd.concat([c_train,h_train])
pj_train.to_excel('pj_train.xlsx',index=False)
​
from sklearn.model_selection import train_test_split
​
x_train,x_test,y_train,y_test=train_test_split(pj_train['segments_clean'].values,pj_train['label'].values,test_size=0.2,random_state=48)
words=[]
for line_index in range(len(x_train)):words.append(' '.join(x_train[line_index]))
# print(words)
​
words2=[]
for line_index in range(len(x_test)):words2.append(' '.join(x_test[line_index]))
​
from sklearn.feature_extraction.text import CountVectorizer
vec=CountVectorizer(max_features=4000,lowercase=False,ngram_range=(1,3))
vec.fit(words)
vec.fit(words2)
​
print('MultinomialNB')
from sklearn.naive_bayes import MultinomialNB
classifier=MultinomialNB(alpha=0.1)
classifier.fit(vec.transform(words),y_train)
train_pr=classifier.predict(vec.transform(words))
test_pr=classifier.predict(vec.transform(words2))
​
from sklearn import  metrics
print(metrics.classification_report(y_train,train_pr))
print(metrics.classification_report(y_test,test_pr))

运行结果

结果如何解读

在代码中,每个模型训练后都会输出一个分类报告,使用 metrics.classification_report 生成。分类报告包括以下指标:

  • 精确率 (Precision):预测为正类的样本中,实际为正类的比例。

  • 召回率 (Recall):实际为正类的样本中,预测为正类的比例。

  • F1 分数 (F1-Score):精确率和召回率的加权平均值,综合衡量模型的性能。

  • 支持数 (Support):每个类别的样本数量。

在我们的运行结果中

  • 类别 0:表示好评的指标。

  • 类别 1:表示差评的指标。

  • accuracy:模型整体的准确率。

  • macro avg:各类别指标的平均值。

  • weighted avg:按样本数量加权的各类别指标平均值。

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

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

相关文章

20250223下载并制作RTX2080Ti显卡的显存的测试工具mats

20250223下载并制作RTX2080Ti显卡的显存的测试工具mats 2025/2/23 23:23 缘起:我使用X99的主板,使用二手的RTX2080Ti显卡【显存22GB版本,准备学习AI的】 但是半年后发现看大码率的视频容易花屏,最初以为是WIN10经常更换显卡/来回更…

【JavaEE进阶】Spring Boot配置文件

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 SpringBoot配置⽂件 举例: 通过配置文件修改端口号 配置⽂件的格式 properties基本语法 读取配置⽂件 properties配置文件的缺点 yml配置⽂件 yml基本语法 yml和proper…

Docker内存芭蕾:优雅调整容器内存的极限艺术

title: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…

【Godot4.3】题目与答案解析合并器

免责申明 本文和工具截图中涉及题库和题目,均为本人自学使用,并未有商业和传播企图。如有侵害,联系删改。 概述 笔者本人医学专业从业人员,编程只是业余爱好。在自己的专业应考学习过程当中: 有时候不太喜欢纸质题库…

学习笔记-250222

论文: Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models 主要研究llm在图像分类中的能力,当提示输入目标类别时,llm能够生成相关的描述以及相应的结构化关系。 1.首先利用llm从普通的描述中获…

欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)

图论中的回路是指一个路径, 它从某个顶点开始, 经过所有边恰好一次, 并回到起始顶点. 定义 欧拉回路: 从一个顶点出发, 经过每条边恰好一次, 并且最终回到起始顶点. 哈密尔顿回路: 从一个顶点出发, 经过每个顶点恰好一次, 并且最终回到起始顶点. 欧拉路径: 从一个顶点出发, …

从图片生成3维场景--NERF原理解析及加速版HashNeRF-pytorch代码实现

概要 NeRF(Neural Radiance Fields)是一种基于神经网络的三维图像生成技术,通过一组从不同角度拍摄的2D图片,生成一个3D场景,并且能够渲染出该场景在任意视角下的图像。这项技术的核心思想是利用神经网络的强大建模能…

PHP-综合4

[题目信息]: 题目名称题目难度PHP-综合42 [题目考点]: PHP综合训练[Flag格式]: SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}[环境部署]: docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2087[题目writeup]:…

爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏

在智能手机高速迭代的今天,高性能、低功耗与小型化已成为核心诉求。智能手机作为人们生活中不可或缺的工具,需要在各种复杂场景下稳定运行。爱普生SG-8101CE可编程晶振凭借其卓越性能,成为智能手机中不可或缺的精密时钟源,为通信、…

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…

【AI】模型量化--模型量化技术基础

1. 背景 对于接触过AI模型的人来说,经常会听说一个词语模型量化,那什么是模型量化?为什么需要模型量化?有哪些常用的模型量化技术呢?本文将一一展开叙述。 2. 概念 模型量化是一种在深度学习和机器学习领域中广泛应用的技术,旨在通过减少模型中数据的表示精度来降低模…

力扣(leetcode)每日一题 1656 设计有序流

1656. 设计有序流 - 力扣(LeetCode) 题目 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) …

【附源码】基于opencv+pyqt5搭建的人脸识别系统

文章目录 前言一、人脸检测二、人脸识别1.训练识别器2.识别人脸 三、界面相关1.Qlabel展示图片2.表格跟随内容而增加和减少3.选择图片文件4.警告框 四、源码获取总结 前言 人脸识别技术作为人工智能领域的一颗璀璨明珠,正逐渐渗透到我们生活的每一个角落&#xff0…

【一起学Rust | 框架篇 | Tauri2.0框架】在Tauri应用中设置Http头(Headers)

文章目录 前言一、配置准备1. 检查版本2. 使用条件3. 支持的请求头(并不是全部支持) 二、使用步骤1. 如何配置header2. 框架集成1. 对于Vite系列、Nuxt、Next.js这种前端框架Vite系列框架Angular系列框架Nuxt系列框架Next.js系列框架 2. 对于Yew和Leptos…

计算机毕业设计SpringBoot+Vue.jst0图书馆管理系统(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

SeaCMS V9海洋影视管理系统报错注入

漏洞背景 SQL 注入攻击是当前网络安全中最常见的一种攻击方式,攻击者可以利用该漏洞访问或操作数据库,造成数据泄露或破坏。通常发生在开发人员未能正确处理用户输入时。 在 SeaCMS V9 中,用户输入(如登录、评论、分页、ID 等&a…

Upload-labs

pass-01 先随便上传一个php文件&#xff0c;但提示发现使用了js对不法文件进行了检查&#xff0c;是前端验证 上传php代码<?php phpinfo();?> ,使用bp抓包 将后缀名改为php然后放行 复制图片链接访问&#xff0c;得到有关php的所有信息 Pass-02 根据提示可以知道&…

算法回顾1

class Solution {public int removeElement(int[] nums, int val) {int fast 0;int slow 0;for (fast 0; fast < nums.length; fast) {if (nums[fast] ! val) {nums[slow] nums[fast];slow;}}return slow;} } 用双指针写这道题&#xff0c;快慢指针初始值都为0&#xf…

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…

LangChain 由入门到精通

LangChain 由入门到精通 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 LangChain 由入门到精通简介一、LangChain环境搭建1.1 集成大模型提供商1.1.1 集成Ollama 1.2 LangChain安装 二、LangChain开发2.1 提示词工程2.2 示例集 三、LangChain LCEL 工作流编…