Python中的Twitter情感分析

88

我正在寻找一个开源的实现,最好是用Python编写的文本情感分析http://en.wikipedia.org/wiki/Sentiment_analysis)。有没有人熟悉这样的开源实现可以使用?

我正在编写一个应用程序,可以搜索Twitter上的某些搜索词,比如“youtube”,并计算“开心”的推文与“伤心”的推文之间的数量差异。 我正在使用Google的App Engine,所以它是用Python编写的。我希望能够对来自Twitter的返回搜索结果进行分类,并且我希望用Python进行分类。 到目前为止,我还没有找到这样的情感分析器,特别是不是用Python编写的。 您是否熟悉这样的开源实现可以使用?最好已经是Python的,但如果不是,希望我能将其翻译成Python。

注意,我分析的文本非常短,它们是推文。因此,理想情况下,这个分类器应该针对这样的短文本进行优化。

顺便说一下,Twitter支持在搜索中使用“:)”和“:(”运算符,旨在做到这一点,但不幸的是,它们提供的分类不是很好,所以我想自己尝试一下。

谢谢!

顺便说一下,一个早期的演示在这里,我目前拥有的代码在这里,我很想与任何感兴趣的开发人员共享它。

12个回答

77

祝你好运。

情感是极具上下文关联的,而发推文的文化使问题更加恶化,因为大多数推文都没有给出上下文。 推特的整个意义在于,您可以利用共享的“真实世界”上下文来在非常短的消息中打包有意义的通信。

如果他们说视频很糟糕,这意味着糟糕,还是非常糟糕

一位语言学教授有一天正在向她的班级讲课。 “在英语中,”她说,“一个双重否定构成一个积极的结构。 然而,在某些语言中(例如俄语),双重否定仍然是否定。 不过,没有任何一种语言可以通过双重肯定来表示否定。”

教室后面传来一个声音,“是啊……对啊。”


4
很高兴你提供了有用的答案,否则我可能只能因为那句话点赞给你了。 :-) - Ben Blank
2
我认为这句话是“yeah yeah”——出自Sidney Morgenbesser之口。 - Scott Weinstein

44

对于这种应用程序,您将不得不自己编写大部分用于统计分类任务的代码。正如Lucka所建议的那样,NLTK是Python自然语言处理的完美工具,只要您的目标不会影响其许可证的非商业性质。但是,我建议使用其他软件包进行建模。我没有发现很多强大的高级机器学习模型适用于Python,因此我将建议一些独立的二进制文件,这些文件可以轻松地与Python合作。

您可能会对高级辨别建模工具包感兴趣,它可以很容易地与Python进行交互。 这已经被用于自然语言处理的各个领域的分类任务中。 您还可以选择多种不同的模型。 我建议从最大熵分类开始,只要您已经熟悉实施朴素贝叶斯分类器。 如果不熟悉,请查看并编写代码,以真正理解统计分类作为机器学习任务。

德克萨斯大学奥斯汀分校的计算语言学小组举办了许多课程,其中大多数项目都使用了这个非常好的工具。 您可以查看计算语言学II课程页面,了解如何使其工作以及它之前使用的应用程序。

另一个在同一领域工作的优秀工具是Mallet。 Mallet的区别在于有更多文档和一些其他模型可用,例如决策树,并且它是Java编写的,这使得它稍微慢一些。 Weka是一个包含各种机器学习模型的整个套件,包括一些图形化内容,但实际上主要用于教学目的,不适合投入生产。

祝你任务顺利。实际上最困难的部分可能是需要大量的知识工程来分类“种子集”,从而让你的模型进行学习。这个种子集需要非常大,具体取决于你是进行二分类(开心 vs 沮丧)还是一整个情感范围(会需要更多)。一定要留一些数据用于测试,或者进行十倍交叉验证或移除一个测试来确保你能够准确地预测。最重要的是,玩得开心!在我看来,这是NLP和AI中最好的部分。


谢谢。我只在晚上做这个,所以需要一些时间,但是当我有准备好的东西时,我会发布更新。 - Ran
7
NLTK代码可根据http://www.nltk.org/faq下的Apache许可证2.0获得。 - amit kumar
1
为什么你说Weka是用于教学目的的?它不是Pentaho BI套件的一部分吗?而且Pentaho确实服务于企业。 - Swapnil

19

感谢大家的建议,它们确实非常有用! 我最终使用了一个朴素贝叶斯分类器,它是从这里借来的。 我从一份好/坏关键字列表开始,然后通过采用用户反馈添加了一个“学习”功能。结果表明它工作得相当好。

有关我的全部工作细节,请参见博客文章

再次感谢您的帮助,非常感谢!


2
博客文章链接已失效,请您更新一下吗? - Petrutiu Mihai
嗨@PetrutiuMihai,确实那个博客已经被删除了。但那是相当古老的东西,不是今天研究的前沿,所以你不会错过太多的内容 ;( - Ran

14

我已经构建了一个标记有情感的词汇表。你可以从这里访问:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

你可以在我的博客上找到一个简短的Python程序:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

这篇文章展示了如何使用单个句子以及Twitter来使用这个词汇表。

词汇表方法有其局限性。你可以在文章“新的ANEW:微博情感分析的词汇表评估”中了解有关我的词汇表限制的调查。这篇文章可以从我的主页获取。

请注意,代码中缺少unicode(s, 'utf-8')(出于教育目的)。


"Posterous Spaces不再可用。你能在某处发布Python代码吗?" - andilabs
1
谢谢您的注意。我已经将Posterous链接更改为我的博客所在的WordPress链接。 - Finn Årup Nielsen
你能谈谈你对情感词库的实验吗?我的意思是分类的精确度和召回率如何? - andilabs
1
我在这里有几个评估链接:http://neuro.compute.dtu.dk/wiki/AFINN#Evaluation。我自己没有评估过它的精度、召回率和分类性能。我所做的是与Mislove的亚马逊机械土耳其标记推文的排名相关性。 - Finn Årup Nielsen

10
许多研究论文表明,情感分析的良好起点是查看形容词,例如,它们是积极的形容词还是消极的形容词。对于一个短文本块来说,这几乎是您唯一的选择...有些论文会查看整个文档或句子级别的分析,但正如您所说,推文相当短...没有真正神奇的方法来理解一个句子的情感,所以我认为您最好的选择是寻找其中一篇研究论文并尝试获取他们的正面/负面定向形容词数据集。

现在,这么说吧,情感是领域特定的,您可能会发现使用通用数据集难以获得高精度。

祝你好运。


糟糕,我本来要抢先回答你的。 - Dana the Sane

4

我认为你可能会发现很难找到你需要的东西。 我知道的最接近的是LingPipe,它具有一些情感分析功能,并且是根据一种有限的开源许可证提供的,但是该软件是用Java编写的。

此外,情感分析系统通常是通过训练一个基于产品/电影评论数据的系统来开发的,这与普通的推文数据显着不同。它们将优化针对几个句子的文本,所有内容都关于同一个主题。我怀疑你最好自己设计基于规则的系统,也许可以基于情感术语词汇表,例如匹兹堡大学提供的词汇表

请查看We Feel Fine以获取类似的想法实现及其漂亮的界面(还有Twitrratr)。


2

看看Twitter情感分析工具吧。它是用Python编写的,使用了半监督机器学习的朴素贝叶斯分类器。源代码可以在这里找到。


1
也许TextBlob(基于NLTK和pattern)是适合你的情感分析工具。

1

我一段时间前遇到了 自然语言工具包。您可以将其用作起点。它还有许多模块和插件,因此也许它们已经有类似的东西。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接