【问题标题】:Sentiment analysis for Twitter in Python [closed]Python中Twitter的情感分析[关闭]
【发布时间】:2010-10-09 02:17:05
【问题描述】:

我正在寻找 Textual Sentiment Analysis (http://en.wikipedia.org/wiki/Sentiment_analysis) 的开源实现,最好是在 python 中。有人熟悉我可以使用的这种开源实现吗?

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

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

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

谢谢!

顺便说一句,早期的演示是here,我目前拥有的代码是here,我很乐意与任何感兴趣的开发人员一起开源它。

【问题讨论】:

    标签: python machine-learning nlp open-source sentiment-analysis


    【解决方案1】:

    祝你好运。

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

    如果他们说视频不好,是表示不好,还是不好

    一位语言学教授正在讲课 有一天去她的课。 “用英语,” 她说:“双重否定形成一个 积极的。不过,在某些语言中, 例如俄语,双重否定是 仍然是负面的。然而,没有 双重肯定可以的语言 形成否定。”

    从房间后面传来的声音 大声说:“是的……对。”

    【讨论】:

    • 我很高兴你有一个有用的答案,否则我可能不得不为你的报价投票。 :-)
    • 我认为这句话是“是的,是的”——来自 Sidney Morgenbesser
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 谢谢。我只在晚上这样做,所以......这需要一些时间,但我会在准备好东西时发布更新
    • NLTK 代码在 Apache 许可证 2.0 下可用,根据 nltk.org/faq
    • 你为什么说 Weka 是为了教学目的?它不是 pentaho BI 套件的一部分吗?而pentaho确实服务于企业。
    【解决方案3】:

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

    我的工作的全部细节在blog post中。

    再次感谢您的帮助!

    【讨论】:

    • 博文链接失效了,能更新一下吗?
    • 嗨@PetrutiuMihai 确实该博客已被删除。但它是相当古老的东西,不是今天的研究前沿,所以你不会错过太多;(
    【解决方案4】:

    我已经构建了一个带有情感标签的单词列表。您可以从这里访问它:

    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')(出于教学原因)。

    【讨论】:

    • “Posterous Spaces 不再可用” 你能在某处发布 python 代码吗?
    • 感谢您的关注。我现在已将后面的链接更改为我将博客移动到的 Wordpress 链接。
    • 您能谈谈您的情感文字实验吗?我的意思是什么是精确,分类的回忆。
    • 我在这里有一些评估的链接:neuro.compute.dtu.dk/wiki/AFINN#Evaluation 我自己还没有评估它在精确度、召回率和分类方面的表现。我所做的是与 Mislove 的 Amazon Mechanical Turk 推文标签的排名相关性。
    【解决方案5】:

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

    现在,话虽如此,情绪是特定于领域的,您可能会发现使用通用数据集很难获得高水平的准确性。

    祝你好运。

    【讨论】:

    • 该死,我要抢占你的先机。
    【解决方案6】:

    我认为您可能很难找到您所追求的东西。我所知道的最接近的东西是LingPipe,它有一些sentiment analysis functionality,并且可以在有限的开源许可证下使用,但是是用Java 编写的。

    此外,情绪分析系统通常是通过对与普通推文显着不同的产品/电影评论数据训练系统来开发的。它们将针对包含多个句子的文本进行优化,这些句子都是关于同一主题的。我怀疑你自己想出一个基于规则的系统会更好,也许基于像the one the University of Pittsburgh provide 这样的情感术语词典。

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

    【讨论】:

      【解决方案7】:

      看看Twitter sentiment analysis tool。它是用 python 编写的,它使用带有半监督机器学习的朴素贝叶斯分类器。源码可以在here找到。

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          我不久前遇到了Natural Language Toolkit。您可能可以将其用作起点。它还有很多模块和插件,所以也许他们已经有类似的东西了。

          【讨论】:

            【解决方案10】:

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

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

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

                【讨论】:

                  猜你喜欢
                  • 2023-04-04
                  • 1970-01-01
                  • 2013-03-22
                  • 2020-08-14
                  • 2022-11-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-12-04
                  相关资源
                  最近更新 更多