基于SnowNLP的购物评论文本情感分析及准确率验证

您所在的位置:网站首页 分析准确率 基于SnowNLP的购物评论文本情感分析及准确率验证

基于SnowNLP的购物评论文本情感分析及准确率验证

2023-12-09 08:32| 来源: 网络整理| 查看: 265

因论文涉及到SnowNLP情感分析的内容,于是对该内容进行了学习,但发现网上的资源发布更新不及时,大多数文章均发布于18年及以前。由于python版本的迭代,使得以往的资源代码有所出入,因此我对于SnowNLP情感分析及准确率验证代码进行了修正更新,结合实例形式(由于是excel用到Pandas)分析了Python使用中文文本挖掘库SnowNLP操作中文文本进行感情分析的相关实现技巧与注意事项,需要的朋友可以参考下。

文章目录

前言

一、SnowNLP库的安装

1.Pycharm安装法

 2.pip安装方法

二、验证SnowNLP情感分析准确率

1.改变默认编码&加载库

2.读取评论文本数据

3.训练语料库(购物评论可跳过)

4.进行预测

5.验证准确率

三、SnowNLP实际情感分析

1.加载库&读取评论文本数据

2.定义函数(批量处理所有的评论信息)

2.情感分析&保存

参考文献

前言

首先简单介绍一下这个库可以进行哪些文本挖掘。Snownlp主要可以进行中文分词(算法是Character-Based Generative Model)、词性标注(原理是TnT、3-gram 隐马)、情感分析(官网木有介绍原理,但是指明购物类的评论的准确率较高,其实是因为它的语料库主要是购物方面的,可以自己构建相关领域语料库,替换原来的,准确率也挺不错的)、文本分类(原理是朴素贝叶斯)、转换拼音、繁体转简体、提取文本关键词(原理是TextRank)、提取摘要(原理是TextRank)、分割句子、文本相似(原理是BM25)。官网还有更多关于该库的介绍,建议先看一下官网,里面有最基础的一些命令的介绍,官网链接:python情感分析工具snownlp 0.11.1。

在本文中,将重点介绍Snownlp中的情感分析,python版本:3.10,供大家参考。

一、SnowNLP库的安装 1.Pycharm安装法

如果你使用的是Pycharm,直接在Pycharm中安装即可,具体安装步骤如下:

 2.pip安装方法

如果你使用的不是pycharm编译器,比如说用的是Spyder,那么这里就可以用也很常见的 pip install 库名 安装办法:

pip install snownlp 二、验证SnowNLP情感分析准确率

首先进行练习数据的准备,从京东网站采集了130条关于草莓的评论文本作为练习数据,由于我只是想练习一下,没采集更多,如果数据量越多,计算出来的准确率越高,将下边每个步骤的代码连接起来就是完整的程序~

1.人工标注

人工标注每条评论的情感正负性,情感正负性就是指该条评论代表了评论者的何种态度,其中-1表示贬义,1表示褒义。以下是样例:

2.改变默认编码&加载库

软件本身默认的是Ascii编码,所以第一步先设置软件的默认编码为utf-8;加载本文所需要的库;代码如下:

# -*-coding = utf-8 -*- import pandas as pd from snownlp import SnowNLP from snownlp import sentiment 3.读取评论文本数据

读取上边收集到数据的excel文件,因此使用pandas:

#//是转义的方式。表示这里\\是一个普通\字符,不容易出错 text = pd.read_excel(r'C:\\Users\Desktop\情感分析测试集.xlsx') #text0读取text数据框的第一列的所有数据 text0=text.iloc[:,0] 4.训练语料库(购物评论可跳过)

由于SnowNLP语料库本身是基于购物评论内容,因此若只是购物评论则不需要进行训练:

#对语料库进行训练,把路径改成相应的位置。我这次练习并没有构建语料库,用了默认的,所以把路径写到了sentiment模块下。 sentiment.train('E:/Lib/site-packages/snownlp/sentiment/neg.txt', 'E:/Lib/site-packages/snownlp/sentiment/pos.txt') #这一步是对上一步的训练结果进行保存,如果以后语料库没有改变,下次不用再进行训练,直接使用就可以了,所以一定要保存,保存位置可以自己决定,但是要把`snownlp/seg/__init__.py`里的`data_path`也改成你保存的位置,不然下次使用还是默认的。 sentiment.save('D:/pyscript/sentiment.marshal') 5.进行预测

遍历每条评论进行预测,可得到每条评论的情感值

senti=[SnowNLP(i).sentiments for i in text0] 5.验证准确率

预测结果为positive的概率,positive的概率大于等于0.6,我认为可以判断为积极情感,小于0.6的判断为消极情感。所以以下将概率大于等于0.6的评论标签赋为1,小于0.6的评论标签赋为-1,方便后面与实际标签进行比较:

newsenti=[] for i in senti: if (i>=0.6): newsenti.append(1) else: newsenti.append(-1) #将新的预测标签增加为text的某一列,所以现在text的第0列为评论文本,第1列为实际标签,第2列为预测标签 text['predict']=newsenti counts=0 #遍历所有标签,将预测标签和实际标签进行比较,相同则判断正确。 for j in range(len(text.iloc[:,0])): if text.iloc[j,2]==text.iloc[j,1]: counts+=1 #输出本次预测的准确率 print(u"准确率为:%f"%(float(counts)/float(len(text))))

运行结果为:

准确率还不错,一是SnowNLP语料库本身与购物评论相关,二是该京东网站评论好评占绝大部分,不是很具有代表性。如果要进行其他内容的文本分析,建议要构建自己的语料库。

三、SnowNLP实际情感分析

验证完SnowNLP的准确率后就可以进行情感分析的实际操作了,这部分也相较简单,依然是使用pandas提取excel表,可直接使用第二部分的数据,也可将lable列删除,本文为方便直就拿来用了,需要对列名多加注意。

1.加载库&读取评论文本数据 # -*-coding = utf-8 -*- from snownlp import SnowNLP import pandas as pd df = pd.read_excel(r'C:\\Users\Desktop\情感分析测试集.xlsx') 2.定义函数(批量处理所有的评论信息) def get_sentiment_cn(text): s = SnowNLP(text) return s.sentiments 2.情感分析&保存

根据df里的“comments”列,将读取文本后的情感分析结果添加到新的一列,命名为“sentiment”

df["sentiment"] = df['comments'].apply(get_sentiment_cn) print(df) #储存为表格。 ata1=df.to_excel(r'C:/Users/Desktop/sentiments.xlsx')

运行结果为:

如图,sentiment列即为SnowNLP情感分析后的值,由于是88%的准确率,依然有些误差,最后有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

参考文献

1.python的中文文本挖掘库snownlp进行购物评论文本情感分析实例

2.情感分析——深入snownlp原理和实践



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3