如何用Python做情感分析?
商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地。本文帮助你一步步用Python做出自己的情感分析结果,难道你不想试试看?
需求
如果你关注数据科学研究或是商业实践,“情感分析”(sentiment analysis)这个词你应该不陌生吧?
维基百科上,情感分析的定义是:
文本情感分析(也称为意见挖掘)是指用自然语言处理、文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观信息。
听着很高大上,是吧?如果说得具体一点呢?
给你一段文本,你就可以用情感分析的自动化方法获得这一段内容里包含的情感色彩是什么。
神奇吧?
情感分析不是炫技工具。它是闷声发大财的方法。早在2010年,就有学者指出,可以依靠Twitter公开信息的情感分析来预测股市的涨落,准确率高达87.6%!
在这些学者看来,一旦你能够获得大量实时社交媒体文本数据,且利用情感分析的黑魔法,你就获得了一颗预测近期投资市场趋势的水晶球。
这种用数据科学碾压竞争者的感受,是不是妙不可言啊?
大数据时代,我们可以获得的文本数据实在太多了。仅仅是大众点评、豆瓣和亚马逊上海量的评论信息就足够我们挥锹抡镐,深挖一通了。
你是不是疑惑,这么高深的技术,自己这个非计算机专业的文科生,如何才能应用呢?
不必担心。从前情感分析还只是实验室或者大公司的独门秘籍。现在早已飞入寻常百姓家。门槛的降低使得我们普通人也可以用Python的几行代码,完成大量文本的情感分析处理。
是不是摩拳擦掌,打算动手尝试了?
那我们就开始吧。
安装
为了更好地使用Python和相关软件包,你需要先安装Anaconda套装。详细的流程步骤请参考《 如何用Python做词云 》一文。
到你的系统“终端”(macOS, Linux)或者“命令提示符”(Windows)下,进入我们的工作目录demo,执行以下命令。
pip install snownlp
pip install -U textblob
python -m textblob.download_corpora
好了,至此你的情感分析运行环境已经配置完毕。
在终端或者命令提示符下键入:
jupyter notebook
你会看到目录里之前的那些文件,忽略他们就好。
好了,下面我们就可以愉快地利用Python来编写程序,做文本情感分析了。
英文
我们先来看英文文本的情感分析。
这里我们需要用到的是 TextBlob包 。
其实,从上图可以看出,这个包可以做许许多多跟文本处理相关的事情。本文我们只专注于情感分析这一项。其他功能以后有时间我们再介绍。
我们新建一个Python 2笔记本,并且将其命名为“sentiment-analysis”。
先准备一下英文文本数据。
text = "I am happy today. I feel sad today."
这里我们输入了两句话,把它存入了text这个变量里面。学了十几年英语的你,应该立即分辨出这两句话的情感属性。第一句是“我今天很高兴”,正面;第二句是“我今天很沮丧”,负面。
下面我们看看情感分析工具TextBlob能否正确识别这两句话的情感属性。
首先我们呼唤TextBlob出来。
from textblob import TextBlob
blob = TextBlob(text)
blob
按Shift+Enter执行,结果好像只是把这两句话原封不动打印了出来而已嘛。
别着急,TextBlob已经帮我们把一段文本分成了不同的句子。我们不妨看看它的划分对不对。
blob.sentences
执行后输出结果如下:
划分无误。可是你能断句有啥了不起?!我要情感分析结果!
你怎么这么着急啊?一步步来嘛。好,我们输出第一句的情感分析结果:
blob.sentences[0].sentiment
执行后,你会看到有意思的结果出现了:
情感极性0.8.主观性1.0.说明一下,情感极性的变化范围是[-1. 1],-1代表完全负面,1代表完全正面。
既然我说自己“高兴”,那情感挽回分析结果是正面的就对了啊。
趁热打铁,我们看第二句。
blob.sentences[1].sentiment
执行后结果如下:
“沮丧”对应的情感极性是负的0.5.没毛病!
更有趣的是,我们还可以让TextBlob综合分析出整段文本的情感。
blob.sentiment
执行结果是什么?
给你10秒钟,猜猜看。
不卖关子了,是这样的:
你可能会觉得没有道理。怎么一句“高兴”,一句“沮丧”,合并起来最后会得到正向结果呢?
首先不同极性的词,在数值上是有区别的。我们应该可以找到比“沮丧”更为负面的词汇。而且这也符合逻辑,谁会这么“天上一脚,地下一脚”矛盾地描述自己此时的心情呢?
中文
试验了英文文本情感分析,我们该回归母语了。毕竟,互联网上我们平时接触最多的文本,还是中文的。
中文文本分析,我们使用的是 SnowNLP包 。这个包跟TextBlob一样,也是多才多艺的。
我们还是先准备一下文本。这次我们换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[0])
s1.sentiments
执行后的结果是:
看来“快乐”这个关键词真是很能说明问题。基本上得到满分了。
我们来看第二句:
s2 = SnowNLP(s.sentences[1])
s2.sentiments
执行结果如下:
这里你肯定发现了问题——“愤怒”这个词表达了如此强烈的负面情感,为何得分依然是正的?
这是因为SnowNLP和textblob的计分方法不同。SnowNLP的情感分析取值,表达的是“这句话代表正面情感的概率”。也就是说,对“我今天很愤怒”一句,SnowNLP认为,它表达正面情感的概率很低很低。
这么解释就合理多了。
小结
学会了基本招式,很开心吧?下面你可以自己找一些中英文文本来实践情感分析了。
但是你可能很快就会遇到问题。例如你输入一些明确的负面情绪语句,得到的结果却很正面。
不要以为自己又被忽悠了。我来解释一下问题出在哪儿。
首先,许多语句的情感判定需要上下文和背景知识,因此如果这类信息缺乏,判别正确率就会受到影响。这就是人比机器(至少在目前)更强大的地方。
其次,任何一个情感分析工具,实际上都是被训练出来的。训练时用的是什么文本材料,直接影响到模型的适应性。
例如SnowNLP,它的训练文本就是评论数据。因此,你如果用它来分析中文评论信息,效果应该不错。但是,如果你用它分析其他类型的文本——例如小说、诗歌等,效果就会大打折扣。因为这样的文本数据组合方式,它之前没有见过。
解决办法当然有,就是用其他类型的文本去训练它。见多识广,自然就“见惯不怪”了。至于该如何训练,请和相关软件包的作者联系咨询。
讨论
除了本文提到的文本分析应用领域,你还知道哪些其他的工作可以用情感分析来自动化辅助完成?除TextBlob和SnowNLP外,你还知道哪些开放免费软件包可以帮助我们完成情感分析工作?欢迎留言分享给大家,我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。
如何用Python做情感分析?相关推荐
- 自然语言处理NLP-100例 | 第一篇:如何用Python做情感分析?
大家好,我是K同学啊~ 今天给大家分享一个情感分析的小案例 在维基百科上,情感分析的定义是: 文本情感分析(也称为意见挖掘)是指用自然语言处理.文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观 ...
- python怎么做情感分析_如何用python进行情感分析
我们在计划中遵循以下三个主要步骤:授权twitter API客户端. 向Twitter API发出GET请求以获取特定查询的推文. 解析推文.将每条推文分类为正面,负面或中立. 首先,我们创建一个Tw ...
- python关联分析如何可视化_如何用Python做AQI分析并可视化?
AQI 分析 1.背景信息 AOI( Air Quality Index),指空气质量指数,用来衡量空气清洁或污染的程度.值越小,表示空气质量越好.近年来,因为环境问题,空气质量也越来越受到人们的重视 ...
- python做情感分析
wordcloud 出现的问题: Q1:ImportError: cannot import name 'WordCloud' from 'wordcloud' 解决:不能将文件名命名为'wordcl ...
- 用python做舆情分析系统_如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...
- 用python做一个舆情分析系统_如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...
- Python爬取《你好李焕英》豆瓣短评并基于SnowNLP做情感分析
爬取过程在这里: Python爬取你好李焕英豆瓣短评并利用stylecloud制作更酷炫的词云图 本文基于前文爬取生成的douban.txt,基于SnowNLP做情感分析. 依赖库: 豆瓣镜像比较快: ...
- python用中文怎么说-如何用Python做中文分词?
打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...
- python 英语分词_如何用Python做中文分词?
打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...
最新文章
- nginx在linux下安装,Nginx在linux下安装及简单命令
- 使用Tensorflow实现残差网络ResNet-50
- Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量
- Vuex State模块化
- 数据结构之线性查找和折半查找
- muck数据的概念理解
- 获取linux数据段地址,获取kernel各个数据段,代码段的地址及范围
- 递归法:整数划分问题(怎么进行划分呢)
- poi各种jar包作用和导入
- 【在大学的快乐生活】ROS,RC车,jetson nano,导航与飙车(1)配件准备
- 计算机知识论,计算机科学与技术中的系统论与辩证法
- 2022数学建模美赛A题详细思路获取
- 剑指offe55--链表中环的入口结点
- 计算机关闭自带杀毒,电脑系统自带杀毒软件怎么关闭?两种Windows defender彻底关闭方法(图文)...
- Java五子棋最全教程
- macmini 387 2k显示器尝试hidpi
- 检查nmos管是否损坏
- Wireshark实践总结
- 超火爆文艺句子,你喜欢哪个呢
- 【20181027T1】洛阳怀【推结论+线性筛+分解质因数+GCD性质】
热门文章
- 电脑如何连接打印机以及共享打印
- java计算机毕业设计高校毕业生就业满意度调查统计系统源码+系统+lw文档+mysql数据库+部署
- Python爬取wallhaven,设置定时任务每日更换幻灯片壁纸
- mysql字符串拼接 空值_mysql字符串拼接并设置null值的实例方法
- 【BiliGPT】一键总结视频内容
- 【Java】--@JsonIgnore and @JsonProperty
- iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析
- 任务栏没有输入法的解决方法
- 调制解调器(俗称猫)
- MTK 关于电池等级问题