Twitter在Python中的情感分析[关闭]


87

我正在寻找文本情感分析http://en.wikipedia.org/wiki/Sentiment_analysis)的开源实现,最好是python 。有谁熟悉我可以使用的开源实现?

我正在编写一个应用程序,该应用程序在Twitter上搜索某个搜索词,例如“ youtube”,并计算“快乐”推文与“悲伤”推文的数量。我正在使用Google的appengine,所以它在python中。我希望能够对来自Twitter的返回搜索结果进行分类,并且希望在python中进行分类。到目前为止,我还没有找到这样的情感分析器,特别是在python中。您熟悉我可以使用的这种开源实现吗?最好是已经在python中了,但是如果没有,希望我可以将其翻译成python。

请注意,我正在分析的文本非常简短,它们是推文。因此,理想地,此分类器针对此类短文本进行了优化。

顺便说一句,twitter确实在搜索中支持“ :)”和“ :(”运算符,其目的只是为了做到这一点,但是不幸的是,它们提供的分类并不是那么好,所以我想自己可以尝试一下。

谢谢!

BTW,早期的演示是在这里和我至今的代码是在这里,我很愿意和任何有兴趣的开发者开源它。

Answers:


44

对于大多数这类应用程序,您必须投放大量自己的代码才能进行统计分类任务。正如Lucka所建议的那样,只要您的目标不干扰其许可证的非商业性质,NLTK就是在Python中进行自然语言操作的理想工具。但是,我建议使用其他软件包进行建模。我还没有找到许多可用于Python的强大高级机器学习模型,因此我将建议一些易于与Python配合使用的独立二进制文件。

您可能对Advanced Discriminative Modeling的工具包感兴趣,该工具包可轻松与Python交互。这已用于自然语言处理各个领域中的分类任务。您还可以选择许多不同的模型。建议您从最大熵分类开始,只要您已经熟悉实现朴素贝叶斯分类器即可。如果不是这样,您可能需要对其进行研究并进行编码,以真正真正地了解作为机器学习任务的统计分类。

得克萨斯大学奥斯汀分校的计算语言学小组开设了课程,其中大多数项目都使用了这一出色的工具。您可以查看Computational Linguistics II的课程页面,以了解如何使其发挥作用以及它以前服务于哪些应用程序。

同样有用的另一个好工具是Mallet。Mallet之间的区别是,有更多的文档和更多可用的模型,例如决策树,并且它是Java编写的,我认为这会使它变慢一些。 Weka是一个大包装中的一整套整套不同的机器学习模型,其中包含一些图形化内容,但实际上主要是出于教学目的,并不是我真正要投入生产的东西。

祝您工作顺利。真正困难的部分可能是您需要预先进行知识工程的数量,以便您对模型将要学习的“种子集”进行分类。它需要相当大,这取决于您是在进行二进制分类(快乐还是悲伤)或整个情绪范围(这将需要更多)。确保保留一些工程数据以进行测试,或者运行十倍测试或删除一个测试,以确保在将数据发布之前,您实际上在预测方面做得很好。最重要的是,玩得开心!我认为,这是NLP和AI的最佳部分。


谢谢。我只在晚上这样做,所以...这需要一些时间,但是如果有准备,我会发布更新
Ran

7
NLTK代码下Apache许可证2.0可作为每nltk.org/faq
阿米特

1
为什么说Weka是用于教学目的?它不是pentaho BI套件的一部分吗?pentaho确实为企业服务。
Swapnil

77

祝你好运。

情感在很大程度上取决于上下文,而在Twitter上发布文化会使问题变得更糟,因为大多数推文都没有提供上下文信息。Twitter的全部意义在于,您可以利用大量共享的“现实世界”上下文,以非常短的消息形式进行有意义的交流。

如果他们说视频很差,那意味着差还是

一位语言学教授有一天在上课。她说:“用英语来说,双重否定构成肯定。在某些语言中,例如俄语,双重否定仍然是否定。但是,没有语言可以使双重肯定构成否定。”

房间后面传来一个声音,“是的。。。对。”


4
我很高兴您有一个有用的答案,否则我可能不得不仅为您的报价而投票支持您。:-)
Ben Blank

2
我认为报价是“是的”-来自Sidney Morgenbesser
Scott Weinstein,

19

感谢大家的建议,它们确实非常有用!我最终使用了朴素贝叶斯分类器,该分类器是我从这里借来的。我首先给它提供了好/坏关键字列表,然后通过利用用户反馈添加了“学习”功能。原来工作得很好。

我的工作的完整细节,如博客文章中所述

同样,您的帮助非常有用,非常感谢!


1
博客文章链接不再起作用,您可以更新它吗?
Petrutiu Mihai 2014年

@PetrutiuMihai大家好,确实该博客已被删除。但这是很旧的东西,截至目前还不在研究的前沿,所以您不会错过太多;(
Ran 2014年

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'),代码中缺少a (出于教学原因)。


“不再提供Posterous Spaces”是否可以将python代码发布到某个地方?
andilabs

1
感谢您的注意。现在,我已将后继链接更改为Wordpress链接,并在其中移动了博客。
2013年

您能否谈谈您对情感的任何实验?我的意思是说是精确,是分类的回忆。
andilabs

1
我在这里有一些评估的链接:Neuro.compute.dtu.dk/wiki/AFINN#Evaluation我还没有亲自评估其性能的准确性,召回率和分类。我所做的是与Mislove的Amazon Mechanical Turk推文标签进行排名相关。
FinnÅrupNielsen

10

许多研究论文表明,情感分析的一个很好的起点是寻找形容词,例如,它们是肯定形容词还是否定形容词。对于一小段文字,这几乎是您唯一的选择...有些论文可以查看整个文档或句子级别的分析,但是正如您所说的那样,tweet相当短...没有真正的魔术方法可以理解因此,我认为您最好的选择是寻找其中一份研究论文,并尝试获取其正面/负面定位形容词的数据集。

现在,已经说过,情感是特定于领域的,您可能会发现很难用通用数据集获得高级别的准确性。

祝好运。


该死,我要抢占你。
Dana the Sane

4

我认为您可能会发现很难找到想要的东西。我所知道的最接近的东西是LingPipe,它具有一些情感分析功能,可以在有限的开放源代码许可下使用,但使用Java编写。

同样,情感分析系统通常是通过对产品/电影评论数据进行培训来开发的,该数据与平均推文有很大不同。它们将针对带有多个句子的文本进行优化,所有句子都围绕同一主题。我怀疑您最好自己建立一个基于规则的系统,也许基于匹兹堡大学提供的情感术语词典。

请查看We Feel Fine,以非常漂亮的界面(和twitrratr)实现类似想法的实现。





0

有点古怪的想法:您可以尝试使用Twitter API下载大量推文,然后使用表情符号对该集合的子集进行分类:“ :)”,“:]”,“:D”等正组,以及另一个带有“ :(”等的否定组。

一旦有了粗略的分类,就可以通过频率或ngram分析或类似的方式搜索更多线索。

这看起来很愚蠢,但是已经对此进行了认真的研究(“情感分析”和表情符号的搜索)。值得一看。



0

对于那些对从头开始编写Twitter Sentiment Analyis编码感兴趣的人,在GitHub上有Coursera课程“ Data Science ”和python代码(作为作业1- link的一部分)。情绪是AFINN-111的一部分

您可以在此处找到可行的解决方案。除了AFINN-111情感列表之外,还有一种简单的实现方式,即根据具有pos / neg分数的推文中的术语频率构建动态术语列表(请参阅此处)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.