手把手教你如何用 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 包 ,相关链接为:

http://t.cn/RzFoHGR

其实,从上图可以看出,这个包可以做许许多多跟文本处理相关的事情。本文我们只专注于情感分析这一项。其他功能以后有时间我们再介绍。

我们新建一个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一样,也是多才多艺的。

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[0])

s1.sentiments

执行后的结果是:

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

我们来看第二句:

s2 = SnowNLP(s.sentences[1])

s2.sentiments

执行结果如下:

这里你肯定发现了问题——“愤怒”这个词表达了如此强烈的负面情感,为何得分依然是正的?

这是因为SnowNLP和textblob的计分方法不同。SnowNLP的情感分析取值,表达的是“这句话代表正面情感的概率”。也就是说,对“我今天很愤怒”一句,SnowNLP认为,它表达正面情感的概率很低很低。

这么解释就合理多了。

小结

学会了基本招式,很开心吧?下面你可以自己找一些中英文文本来实践情感分析了。

但是你可能很快就会遇到问题。例如你输入一些明确的负面情绪语句,得到的结果却很正面。

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

首先,许多语句的情感判定需要上下文和背景知识,因此如果这类信息缺乏,判别正确率就会受到影响。这就是人比机器(至少在目前)更强大的地方。

其次,任何一个情感分析工具,实际上都是被训练出来的。训练时用的是什么文本材料,直接影响到模型的适应性。

例如SnowNLP,它的训练文本就是评论数据。因此,你如果用它来分析中文评论信息,效果应该不错。但是,如果你用它分析其他类型的文本——例如小说、诗歌等,效果就会大打折扣。因为这样的文本数据组合方式,它之前没有见过。

解决办法当然有,就是用其他类型的文本去训练它。见多识广,自然就“见惯不怪”了。至于该如何训练,请和相关软件包的作者联系咨询。

讨论

除了本文提到的文本分析应用领域,你还知道哪些其他的工作可以用情感分析来自动化辅助完成?除TextBlob和SnowNLP外,你还知道哪些开放免费软件包可以帮助我们完成情感分析工作?欢迎留言分享给大家,我们一起交流讨论。

====================================分割线================================

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-09-20 04:59:55

手把手教你如何用 Python 做情感分析的相关文章

python-为何用Python做爬虫时抓取下来的页面跟源代码不一样?

问题描述 为何用Python做爬虫时抓取下来的页面跟源代码不一样? 代码如下: -*- coding:utf-8 -*- import urllib import urllib2 import re baseURL = 'http://zhidao.baidu.com/question/491268910.html' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, li

建站利器,手把手教你如何用建站宝盒自助建站系统自己建网站

建站利器,手把手教你如何用建站宝盒自助建站系统自己建网站 不会美工设计!不会网页编辑!不会代码编程!神马,你什么都不会还想自己建网站? 对,可以!用建站宝盒建站,您可以什么都不会,只需要会打字,会上网就足够了! 下面,小敏就来教您,如何用建站宝盒自己建网站: 首先,登陆建站宝盒后台,如果您还没有开通建站宝盒,也可以进入免费试用后台,填写http://www.aliyun.com/zixun/aggregation/31068.html">基本资料: 填完资料,接下来进入第二步,挑选安装自助

一文详解如何用 python 做中文分词

打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用 Python 来动手实践吧.   需求 在此前发布的文章<从零开始教你用 Python 做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩儿得可还高兴? 文中提过,选择英文文本作为示例,是因为处理起来最简单.但是很快就有读者尝试用中文文本做词云了.按照前文的方法,你成功了吗? 估计是不成功的.因为这里面缺了一个重要的步骤. 观察你的英文文本.你会发现英文单词之间采用空格作为强制分隔符. 例如: Yes Mini

手把手教你用杰奇程序做书站之整合DISCUZ论坛

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 本文针对使用杰奇程序做书站的新人,高手可以略过了. 很多朋友都说杰奇自带的论坛不好看,功能设置也很少,想用其它类型的论坛比如DISCUZ这种类型的论坛程序.而杰奇官方的关于整合DISCUZ的教程又太少,整合起来很麻烦,对于新人来说更是难上加难.下面我把杰奇整合DISCUZ的方法介绍一下,希望对新人有所帮助. 一.安装杰奇程序.如何安装杰奇程序

Twitter是怎么做情感分析的?长文解读!

本文由北邮@爱可可-爱生活 老师推荐,阿里云组织翻译. 以下为译文 如今,微博已成为一种深受互联网用户欢迎的沟通工具.在那些提供微博服务的热门网站上,如Twitter.Tumblr和Facebook,每天都有数以百万的消息产生.这些消息的作者记录自己的生活,分享对不同话题的看法,并讨论当前的问题.由于消息格式不受限制以及微博平台易于访问,互联网用户倾向于从传统沟通工具(如传统的博客和邮件列表)转移到微博服务上来.随着越来越多的用户讨论自己使用的产品和服务,或表达自己的政治和宗教观点,微博网站已经

如何用KNIME进行情感分析 | 下

如何能够让机器"读懂"人的情感?情感分析提供了解决的一个思路.这也使得它成为自然语言分析(Natural Language Processing)中最令人神往的山对面的"风景". 什么是情感分类(sentiment classification) 简单说,就是对于一句或一段话,判断说话者的情感,是正向(积极)的,还是负向(消极)的.这种情感分类任务可以看作一个二分类问题. 完成情感分类的核心问题 决定分类准确率的关键在于特征的选取与语料的质量.其中特征问题解决的是:

深度 | 为什么要利用NLP做情感分析?

多数人不能准确把握人类的情感变化,我也不例外,但是计算机却可以做到这一点.基于上面的事实,我们要讲述一件你也许已经熟知的机器学习分支--自然语言处理(NLP),这听起来很像计算机试图学习并理解我们平时说的"自然语言".但是我们并不满足于此,我们要做一件神奇的事,那就是"情感分析".听到计算机能分析人类情感这件事,很多人肯定会觉得有些不可思议,但这正是我们下面要谈论的. 自然语言处理 我们稍微回顾一下,很多程序员都知道人与人和人与计算机交流的方法有很大的区别.例如,当

手把手教你如何用 OpenCV + Python 实现人脸识别

下午的时候,配好了OpenCV的Python环境,OpenCV的Python环境搭建.于是迫不及待的想体验一下opencv的人脸识别,如下文.   必备知识 Haar-like Haar-like百科释义.通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等. opencv api 要想使用opencv,就必须先知道其能干什么,怎么做.于是API的重要性便体现

手把手教你如何用 TensorFlow 实现基于 DNN 的文本分类

许多开发者向新手建议:如果你想要入门机器学习,就必须先了解一些关键算法的工作原理,然后再开始动手实践.但我不这么认为. 我觉得实践高于理论,新手首先要做的是了解整个模型的工作流程,数据大致是怎样流动的,经过了哪些关键的结点,最后的结果在哪里获取,并立即开始动手实践,构建自己的机器学习模型.至于算法和函数内部的实现机制,可以等了解整个流程之后,在实践中进行更深入的学习和掌握. 那么问题来了,既然作为初学者不需要掌握算法细节,但实现模型的过程中又必须用到相关算法,怎么办呢?答案是借助于互联网上已经实