自然语言处理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:
                continue
            line_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:
                continue
            line_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:按样本数量加权的各类别指标平均值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程

ExoPlayer 是一个开源的 Android 媒体播放库,由 Google 开发和维护,用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性,适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…

华为昇腾910b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…

【操作系统】操作系统概述

操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS?1.1.2 操作系统作用——OS有什么用?1.1.3 操作系统地位——计算机系统中,OS处于什么地位?1.1.4 为什么学操作系统? 1.2 操作系统的历史1.2.1 操作系统…

使用Dify将AI机器人嵌入到你的前端页面中及chrome的扩展应用

目录 1 博主有话说2 前提环境3 Dify创建个聊天助手应用4 将AI聊天机器人嵌入到html中5 将AI聊天机器人设置为chrome的扩展应用6 博主增语 1 博主有话说 那博主话不多说,先展示一下成果! 这个界面是使用dify配置的一个“聊天助手”的应用,助…

Django REST Framework (DRF) 中用于构建 API 视图类解析

Django REST Framework (DRF) 提供了丰富的视图类,用于构建 API 视图。这些视图类可以分为以下几类: 1. 基础视图类 这些是 DRF 中最基础的视图类,通常用于实现自定义逻辑。 常用类 APIView: 最基本的视图类,所有其…

数据结构-图-找出星型图的中心节点

力扣题目:1791. 找出星型图的中心节点 - 力扣(LeetCode) 有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。 给你一个二维整数…

计算机网络之物理层——基于《计算机网络》谢希仁第八版

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

VScode C语言学习开发环境;运行提示“#Include错误,无法打开源文件stdio.h”

C/C环境配置 参考: VS Code 配置 C/C 编程运行环境(保姆级教程)_vscode配置c环境-CSDN博客 基本步骤 - 安装MinGW-W64,其包含 GCC 编译器:bin目录添加到环境变量;CMD 中输入gcc --version或where gcc验证…

计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)

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

(学习总结25)Linux工具:vim 编辑器 和 gcc/g++ 编译器

Linux工具:vim 编辑器 和 gcc/g 编译器 vim 编辑器在 Linux 命令行中执行 vimvim 命令模式光标操作相关命令文本或字符操作命令撤销操作命令查找操作 vim 插入模式vim 底行模式查找与编写操作界面操作文件处理操作vim 与 shell 交互其它操作退出 vim 一般操作 vim 可…

IntelliJ IDEA中Maven配置全指南

一、环境准备与基础配置 1.1 Windows 环境下载并配置 Maven 见此篇博文:环境配置 1.2 IDEA配置步骤 打开设置面板:File → Settings → Build → Build Tools → Maven 关键配置项: Maven home path E:\apache-maven-3.9.9 (…

第4章 信息系统架构(三)

4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…

Ubuntu 20.04源码安装opencv 4.5.0

安装依赖项 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt install -y wget unzip安装opencv依赖库 sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev l…

前端如何转战鸿蒙

前端如何转战鸿蒙系统 在当今技术日新月异的时代,前端开发者们不断探索新的领域和机会。随着鸿蒙系统的崛起,一个全新的生态正等待着前端开发者们去开拓。那么,作为前端开发者,我们为何要转战鸿蒙系统?又该如何顺利转型…

Linux(ubuntu) GPU CUDA 构建Docker镜像

一、创建Dockerfile FROM ubuntu:20.04#非交互式,以快速运行自动化任务或脚本,无需图形界面 ENV DEBIAN_FRONTENDnoninteractive# 安装基础工具 RUN apt-get update && apt-get install -y \curl \wget \git \build-essential \software-proper…

新能源汽车核心元件揭秘:二极管、三极管结构与工作原理解析(2/2)

上一节我们讲了二极管的原理, 原文章: https://zhuanlan.zhihu.com/p/25252117833 看了的朋友应该很容易懂这节课 这篇文章我们来说说三极管的工作原理啊 这里要说下几个概念 1 半导体的导通, 就是说里面的负电荷电子和正电荷空穴可以大量的从 一个地方达到我们想要的地方…

2024年数学SCI1区TOP:改进海洋捕食者算法MMPA用于UAV路径规划,深度解析+性能实测

目录 1.摘要2.海洋捕食者算法MPA原理3.改进策略4.结果展示5.参考文献6.获取代码 1.摘要 本文提出了一种改进海洋捕食者算法(MMPA),用于解决具有多重威胁的复杂环境中的全局优化问题,针对无人机(UAV)路径规…

QML ToolButton与DelayButton的使用、详解与自定义样式

QML MenuBarItem与MenuItem的使用、详解与自定义样式 一、介绍1、ToolButton常见用法基础示例设置图标 常用属性texticonenabledshortcutcheckable & checked 信号onClickedonPressed 和 onReleased 样式和外观使用场景 2、DelayButton使用场景核心属性1. delay 核心信号1.…

Linux下基本指令(4)

Linux权限的概念 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户…

网络安全设备防护原理 网络安全防护装置

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 防火墙 简介 网络层的防护设备,依照特殊的规则允许或者限制传输的数据通过 是由软件和硬件设备组合而成,在内部网和外部网之间、专用网…