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

因论文涉及到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原理和实践

  • 16
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值