手把手教你如何用 Python 做情感分析

频道:社交专题 日期: 浏览:9

按雷锋网所说,本文的作者是王树义,其原本刊载在于被称作玉树芝兰的微信公众号,具体为nkwangshuyi,而雷锋网是经过了授权才进行发布的。

于商品评论挖掘,于电影推荐,于股市预测等方面,情感分析有着极大的可用之处。本文助力你一步一步借助Python得出自身情感分析结果,难道你不想到此尝试一番吗?

需求

要是你留意数据科学研究,或者关注商业实践,那“情感分析”这个词,你想必不会觉得陌生吧? 这里说的“情感分析”英文是“sentiment analysis” ,对吧?

维基百科上,情感分析的定义是:

文本情感分析,也被称作意见挖掘,借助自然语言处理,运用文本挖掘,通过计算机语言学等办法,来辨别并提取原素材里的主观信息。

听着很高大上,是吧?如果说得具体一点呢?

给你一段文本,你能够运用情感分析的自动化方式,获取这一段内容之中所涵盖的情感色彩是怎样的。

神奇吧?

情感分析并非是供人炫技的工具,它乃是一种闷声发大财的方法,早在2010年的时候,便有学者明确指出,能够凭借Twitter公开信息所进行的情感分析来对股市的涨落予以预测,其准确率高达87.6%!

在这些学者眼中,一旦你得以获取海量实时社交媒体文本数据爱游体育app下载官网,并且运用情感分析的奇妙手段,你便拥有了一颗可预测近期投资市场趋势的水晶球 。

这种用数据科学碾压竞争者的感受,是不是妙不可言啊?

大数据时期,我们能够获取的文本数据着实太过繁多了,只是大众点评里海量的评论讯息,以及豆瓣里海量的评论讯息,还有亚马逊上海量的评论讯息,就足以让我们手持锹镐来一番深度挖掘了。

你是否存有疑问,这般高深的技术,身为非计算机专业的文科生的自己,究竟该怎么去应用呢?

没有必要忧心。以前的时候情感分析仅仅是实验室独有的秘籍,或者是大公司特有的秘籍。如今早就已经进入到普通老百姓的家中了。门槛的降低致使我们这些普通人能够借助Python的几行代码,去完成大量文本的情感分析处理。

是不是摩拳擦掌,打算动手尝试了?

那我们就开始吧。

安装

你要先安装Anaconda套装,以此达成能更好使用Python以及相关软件包的目的,有关详细的流程步骤请参照《 如何用Python做词云 》这篇文章 。

执行以下这些命令 。

pip install snownlp

pip install -U textblob

python,通过 -m 方式,执行 textblob 里的 download_corpora命令 。

好了,至此你的情感分析运行环境已经配置完毕。

在终端或者命令提示符下键入:

jupyter notebook

你会看到目录里之前的那些文件,忽略他们就好。

好了,接下来,我们是能够心情愉悦地借助Python去编写程序,进而开展文本情感分析的 。

英文

我们先来看英文文本的情感分析。

这里我们需要用到的是 TextBlob 包 ,相关链接为:

http://t.cn/RzFoHGR

实际上,由上图能够看得出,这个包能够开展林林总总跟文本处理有关联的事宜。在本文之中我们仅仅聚焦于情感分析这一个项目。其他的功能在以后有空闲时间的时候我们再去予以介绍。

我们新建一个笔记本,这个笔记本是Python 2类型的,而后把它进行命名,命名为何种名称呢,命名为“sentiment - analysis”。

先准备一下英文文本数据。

表述存在矛盾,原句既有“开心”又有“难过”,无法按要求改写,若忽略矛盾按要求改写为:文本等于,“我今天是开心的。”,“我今天是难过的。”

于此我们输入了两句话,将其纳入text这个变量之中。历经十几年英语学习的你,应当即刻辨别出这两句话的情感属性。头一句是“我今天很高兴”,属于正面;第二句是“我今天很沮丧”,属于负面。

接下来,我们瞧瞧情感分析工具 TextBlob,看看它能不能准确辨别这两句话的情感的属性 。

首先我们呼唤TextBlob出来。

from textblob import TextBlob

blob = TextBlob(text)

blob

执行,是按Shift与Enter,结果呢,好像仅仅只是把此两句话,原封不动地打印了出来罢了。

别赶忙爱游戏app官方入口最新版本,TextBlob已然替咱们将一段文案划分成了各异的语句,我们不妨瞧瞧它的划分是否正确。

blob.sentences

执行后输出结果如下:

划分无误。可是你能断句有啥了不起?!我要情感分析结果!

你为何这般着急呀,要一步步去做呀,行,我们将第一句的情感分析结果进行输出,

blob.sentences.sentiment

执行后,你会看到有意思的结果出现了:

情感极性为0.8,主观性是1.0 。进行说明,情感极性的变化范围所在之处,-1表示着完全负面,1表示着完全正面 。

既然我说自己“高兴”,那情感分析结果是正面的就对了啊。

趁热打铁,我们看第二句。

blob.sentences.sentiment

执行后结果如下:

“沮丧”对应的情感极性是负的0.5,没毛病!

更有意思的是,我们是能够让TextBlob去综合剖析出整段文字的情感的,这一点十分不同寻常。

blob.sentiment

执行结果是什么?

给你10秒钟,猜猜看。

不卖关子了,是这样的:

可能你觉得毫无道理,为何一句“高兴”,一句“沮丧”,合并之后最终会得出正向结果呢?

首先,不同极性的词,在数值上存在区别。我们理应能够寻得比“沮丧”更具负面性质的词汇。并且,这契合逻辑,谁会这般矛盾地描述此时自身的心情呢,即“天上一脚,地下一脚”的表述方式 ?

中文

开展了英文文本情感分析的尝试,此刻我们应当回归到母语上来,毕竟,在互联网上我们平常所接触数量最多的文本,乃是中文的。

进行中文文本分析,运用的是SnowNLP包,此包如同TextBlob,同样具备多种才能技艺 。

SnowNLP 的相关链接如下:

http://t.cn/8kf1c3p

我们还是先准备一下文本。这次我们换2个形容词试试看。

text = u"我今天很快乐。我今天很愤怒。"

注意,在引号之前我们添加了一个字母u,它是非常重要的,因为它向Python提示,“这一部分我们所输入的文本编码格式属于Unicode,千万不要弄错了哦”,至于文本编码格式的细致情况,有机会的时候我们再展开详细地聊。

好了,文本有了,下面我们让SnowNLP来工作吧。

from snownlp import SnowNLP

s = SnowNLP(text)

我们想要去看一看,SnowNLP可不可以如同TextBlob那般,将我们所输入的句子进行正确划分,因而我们实施了以下输出:

for sentence in s.sentences:

print(sentence)

执行的结果是这样的:

好的,看来SnowNLP对句子的划分是正确的。

我们来看第一句的情感分析结果吧。

s1 = SnowNLP(s.sentences)

s1.sentiments

执行后的结果是:

看来“快乐”这个关键词真是很能说明问题。基本上得到满分了。

我们来看第二句:

s2 = SnowNLP(s.sentences)

s2.sentiments

执行结果如下:

这里,你必然是察觉到了问题,“愤怒”这个词汇展现出了这般强烈的负面情感,可是为何得分居然依旧是正的呢?

这是由于SnowNLP跟textblob所采用的计分方式存在差异,SnowNLP进行情感分析取值时传达出的是“这句话呈现正面情感的概率”,换句话讲,对于“我今天很愤怒”这个句子来说由SnowNLP判定其表达正面情感的概率是极低极低的。

这么解释就合理多了。

小结

学会了基本的招式,是不是特别开心呀,接下来你能够自行去寻觅一些中文以及英文的文本用以开展情感分析了 。

但是,你有可能很快就会碰到问题,比如说,你输入一些清晰明确的负面情绪语句,然而得到的结果却十分正面。

不要以为自己又被忽悠了。我来解释一下问题出在哪儿。

首先,情感判定对于许多语句而言,是需要借助上下文以及背景知识的,所以要是这类信息处于缺乏的状态,那么判别正确率便会受到影响,这正是人比机器(至少在当下)更为强大的所在之处。

其次,任何一个情感分析工具,实际上都是通过训练而形成的。训练期间所使用的文本材料是什么,这会对模型的适应性产生直接影响。

就像SnowNLP,其训练文本即为评论数据,所以,要是你运用它去剖析中文评论信息爱游戏app入口官网首页,效果理应挺好,然而,要是你借助它剖析其他种类的文本,像小说、诗歌之类的,效果便会大幅降低,原因在于这样的文本数据组合形式,它以前未曾见过。

有解决办法,那便是用别的类型文本对其进行训练,见得多、见识广了,自然而然就“见惯不怪”了,至于怎样去训练,要和相关软件包的作者联系询问 。

讨论

除开本文所提及的文本分析应用范畴,你另外知晓哪些别样的工作能够借由情感分析予以自动化辅助达成呢?除TextBlob以及SnowNLP之后,你此外晓得哪些开放免费的软件包能够助力我们达成情感分析工作呢?欢迎留下言论分享给众人,我们一同展开交流探讨。

网友留言(0)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。