python snownlp了解_[Python][snownlp]基于情感词典的情感分析

前言

文本情感分析(也称为意见挖掘)是指用自然语言处理、文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观信息,其主要任务就是对文本中的主观信息(如观点、情感、态度、评价、情绪等)进行提取、分析、处理、归纳和推理。

当前的情感分析技术分流成两类,一是基于规则(情感词典)的方法;二是基于统计学习的方法。第一类情感分析根据情感词典所提供的词的情感倾向性信息,结合语言知识和统计信息,进行不同粒度下的文本情感分析。第二类方法主要研究如何在本文表示层面寻找更加有效的情感特征,以及如何在机器学习模型中合理地使用这些特征。与第一类相比,第二类方法虽沿袭了传统基于主体的文本分类框架,但存在一些特殊问题需要单独处理,如情感极性的转移和领域适应问题(宗成庆等,2019)。

具体一点就是,基于情感词典的情感分析,将文本中的词句与词典配对计算它的情感数值,例如可能“快乐”在某个词典中情感信息值为0.9。而基于统计学习的情感分析,需要用到机器学习的算法,将文本中的数据集先做情感评判,后去训练模型,再用训练好的模型去判断新的句子的情感是偏向“正情绪”还是“负情绪”。这一方法的核心是构造数据集,标注数据集,基于数据集进行特征提取(传统机器学习)或者深度学习自动特征提取后建模,再去做情感分析。

在这里,我们先了解基于情感词典的情感分析是如何进行的。主要用到snownlp包来完成入门学习。SnowNLP是一个python写的类库,主要用于处理中文文本,可实现分词、词性标注、情感分析、汉字转拼音、繁体转简体、关键词提取以及文本摘要等等。

安装、导入snownlp

pip install snownlp #安装

from snownlp import SnowNLP #导入

分析句子的情感值

sentence1 = '我爱机器学习,我爱文本挖掘!'

s1 = SnowNLP(sentence1)

s1.sentiments

下一个句子

sentence2 = '我不舒服,很愤怒'

s2 = SnowNLP(sentence2)

s2.sentiments

如下图所示:

45607c0982f4bbb7c1a8608f5f8b96e8.png

SnowNLP的结果取值范围在0到1之间,越接近1表示正面情绪;越接近0表示负面情绪。我们可以看到,句子1得到了0.999的评价,是非常积极的;句子2得到了0.083的评价,是非常消极的。

简单对某餐厅评论做情感分析

在这里用我事先准备好的对某餐厅的十几条评论,保存在excel文件中,如图:

9d00767588550d0ad9f87c0516f98e72.png

# 读如数据并显示数据的前五条

import pandas as pd

df = pd.read_excel("comments.xlsx")

df.head()

如下图所示:

a9eba7cade4750f34344a2e9a6f3b410.png

然后我们可以试着看看第一个评论的情感分析结果。

text = df.comments.iloc[0]

from snownlp import SnowNLP

s = SnowNLP(text)

s.sentiments

如下图所示:

78210baa7f7ba9f606633c01643bbce8.png

试着看第二个评论的情感分析结果:

text = df.comments.iloc[1]

from snownlp import SnowNLP

s = SnowNLP(text)

s.sentiments

如下图所示:

48595fecdb6e62e989138b6ca9b4c671.png

可以看到,第一个评论评分非常积极,而第二个评论则相对消极,从内容看直观盘判断这是合理的。

在此基础上,我们可以定义函数,批量处理所有的评论信息。

def get_sentiment_cn(text):

s = SnowNLP(text)

return s.sentiments

df["sentiment"] = df.comments.apply(get_sentiment_cn)

df.head()

如下图所示:

f1efc3664ca30352308982b92d55c78a.png

通过mean()函数可以知道评论的平均值。

df.sentiment.mean()

如下图所示:

40b792548dd435e81d98e76f34a5ac26.png

然后我们可以借助matplotlib画出时间的趋势图

x=df["data"]

y=df["sentiment"]

plt.figure(figsize=(20, 8), dpi=80)

plt.plot(x, y)

plt.show()

如下图所示:

c61e8ab22e447505baabb4d48e06288a.png

可以看到2020-03-10这天评论的情感分析得分是最低的,我们想看看是怎么回事。

通过排序,找到情感分析得分倒数第一位的评论,并将内容打印出来:

df.sort_values(['sentiment'])[:1]

print(df.sort_values(['sentiment']).iloc[0].comments)

如下图所示:

0c70d56c8b017e6c56a3cc1997d42ba8.png

得到这个结果,牛排店就可以按照评论的情况,去寻找出现问题的原因了。

后记

以上就是用python的snownlp包进行简单情感分析的过程。未来继续探索基于机器学习的情感分析过程,做运用于特定问题的情景之中的情感分析。本次学习参考了宗成庆等人著的《文本数据挖掘》(清华大学出版社,2019年版),分析过程主要借鉴了文科生数据科学上手指南中自然语言处理相应的部分,以及Python_文本分析入门_SnowNLP(1),初学者|今天掌握SnowNLP好不好等网站的辅助,感谢前人的分享。

此外,Github官网的信息也是重要资料。

  • 11
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值