88

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

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

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

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

谢谢!

顺便说一句,这里有一个早期的演示,我到目前为止的代码也在这里,我很乐意与任何感兴趣的开发人员一起开源它。

4

12 回答 12

77

祝你好运。

情绪与上下文密切相关,而推文文化使问题变得更糟,因为大多数推文都没有给出上下文。twitter 的全部意义在于,您可以利用大量共享的“现实世界”上下文将有意义的通信打包到非常短的消息中。

如果他们说视频不好,这意味着不好还是不好

有一天,一位语言学教授正在给她的班级讲课。“在英语中,”她说,“双重否定形成肯定。但是在某些语言中,例如俄语,双重否定仍然是否定的。但是,没有一种语言可以使双重肯定形成否定。”

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

于 2009-03-03T19:54:07.457 回答
44

对于大多数此类应用程序,您将不得不为统计分类任务编写大部分自己的代码。正如 Lucka 建议的那样,NLTK 是 Python 中自然语言操作的完美工具,只要您的目标不干扰其许可证的非商业性质。但是,我建议使用其他软件包进行建模。我还没有找到很多可用于 Python 的强大的高级机器学习模型,所以我将推荐一些可以轻松与之配合的独立二进制文件。

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

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

另一个以同样方式工作的好工具是Mallet。Mallet 之间的区别在于有更多的文档和一些可用的模型,例如决策树,而且它是用 Java 编写的,在我看来,这让它慢了一点。 Weka是一整套不同的机器学习模型,包含在一个大包中,其中包括一些图形内容,但它实际上主要用于教学目的,并不是我真正投入生产的东西。

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

于 2009-02-22T00:26:23.220 回答
19

谢谢大家的建议,确实很有用!我最终使用了从这里借来的朴素贝叶斯分类器。我首先为它提供了一个好/坏关键字列表,然后通过使用用户反馈添加了一个“学习”功能。结果证明效果很好。

我的工作的全部细节在博客文章中。

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

于 2009-03-19T13:04:07.113 回答
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 一起使用。

单词列表方法有其局限性。你会在文章“A new ANEW: Evaluation of a word list for sentiment analysis in microblogs”中找到对我的词表局限性的调查。那篇文章可以从我的主页上找到。

请注意unicode(s, 'utf-8')代码中缺少 a(出于教学原因)。

于 2011-07-18T13:54:10.823 回答
10

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

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

祝你好运。

于 2009-02-21T23:04:24.247 回答
4

我想你可能会发现很难找到你想要的东西。我所知道的最接近的东西是LingPipe,它具有一些情绪分析功能,并且可以在有限的开源许可证下使用,但是是用 Java 编写的。

此外,情绪分析系统通常是通过在产品/电影评论数据上训练一个系统来开发的,这与普通推文有很大不同。它们将针对包含多个句子的文本进行优化,这些句子都是关于同一主题的。我怀疑你自己想出一个基于规则的系统会更好,也许基于匹兹堡大学提供的情感术语词典。

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

于 2009-02-21T22:50:05.060 回答
2

看看Twitter 情绪分析工具。它是用 python 编写的,它使用带有半监督机器学习的朴素贝叶斯分类器。来源可以在这里找到。

于 2011-07-13T09:23:02.027 回答
1

不久前我遇到了自然语言工具包。您可能可以将其用作起点。它也有很多模块和插件,所以也许他们已经有类似的东西了。

于 2009-02-21T21:53:04.917 回答
1

也许TextBlob(基于 NLTK 和模式)是适合您的情感分析工具。

于 2014-08-13T07:59:44.000 回答
0

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

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

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

于 2009-03-16T06:22:40.497 回答
0

TweetFeel 有一个 Twitter Sentiment API,可以对推文进行高级语言分析,并可以检索正面/负面推文。见http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm

于 2010-03-13T02:07:45.493 回答
0

对于那些对从头开始编写 Twitter Sentiment Analyis 代码感兴趣的人,GitHub 上有一个带有 Python 代码的 Coursera 课程“数据科学”(作为作业 1 -链接的一部分)。情绪是AFINN-111的一部分。

您可以找到有效的解决方案,例如在这里。除了 AFINN-111 情绪列表之外,还有一个基于具有 pos/neg 分数的推文中的术语频率构建动态术语列表的简单实现(参见此处)。

于 2014-03-17T11:12:32.527 回答