Twitter4j和Esper:在Twitter上跟踪用户情绪

对于复杂事件处理和Twitter API的新手,我希望这是一个简短的教程,可以帮助他们Swift起步。

管理大数据并从中挖掘有用的信息是当前技术中最热门的讨论主题。 来自Twitter,Facebook和Linkedin等社交网络的半结构化数据的爆炸式增长使Hadoop,Cassandra等技术成为每个技术对话的一部分。 为了不落后于竞争,所有以客户为中心的组织都在积极参与制定社会战略。
公司可以从社交网络中获取什么数据? 为初学者考虑基于位置的服务,定向广告和算法股权交易。 IDC Insights拥有一些有关大数据与业务分析之间关系的信息博客 。 Barb Darrow在gigaom.com上的博客文章中解释说,大数据本身将是毫无意义的,除非可以使用合适的分析工具进行筛选。

公司通常会听取社交信息,以了解客户对产品的兴趣或看法。 他们还试图确定“影响者”(在社交图中联系最多的人),以便他们可以向此类人员提供更好的报价,并从他们的营销中获得更大的收益。 从事股票交易的公司想知道在Twitter上讨论了哪些公开贸易公司,以及用户对此的看法。

从像IBM这样的大公司到规模较小的新兴企业,每个人都在竞相利用大数据管理和分析的大部分机会。 可以从Web上免费获得许多有关大数据的文档,例如IBM'Big Data Platform'的电子书。 但是,其中很多仅涉及理论。 Jouko Ahvenainen在回应Barb Darrow的上述帖子时指出,“许多谈论大数据机会的人过于笼统,谈论的是更好的客户理解,更好的销售等。实际上,您必须非常具体,您利用什么以及如何使用”。

听起来合理,不是吗? 因此,我开始通过制作一个想法原型来进一步研究这一点,这是我知道的唯一好的选择。 如果我能做到,那么任何人都可以做到。 该代码非常简单。 但是,这就是重点。 自己编写CEP框架非常复杂,但使用起来却不是。 同样,Twitter使通过REST API获取信息变得非常容易。

大数据– http://www.bigdatabytes.com/managing-big-data-starts-here/
我之前博客中写道,复杂事件处理(CEP)是大数据框架的关键组成部分。 与CEP一起,具有Hadoop的框架用于从社交网络的24×7数据流中进行编译,解析和理解。 今天,Twitter的流式API和CEP可以一起使用,以捕获Twitter用户的幸福感。 每当我在推文的文本中发现“大声笑”时,我在下面提供的代码都会侦听实时推文,以生成一个“幸福”事件。 CEP用于捕获快乐事件,并且每当在预定时间段内快乐事件的计数超过预定数量时,都会发出警报。 假设用户每次使用“大声笑”都会感到高兴,这是非常简单的,但这有助于理解要点。 在实践中,衡量用户的情感并不容易,因为它涉及自然语言分析。 考虑下面的示例,该示例突出了分析自然语言的复杂性。

Iphone从来没有变好。

Iphone从未 如此出色。

如您所见,在句子中仅添加一个单词就完全改变了含义。 因此,自然语言处理被认为是计算机科学中最棘手的问题之一。 您可以使用斯坦福大学提供的免费在线讲座来学习“自然语言处理”。 该链接直接带您进入克里斯托弗·曼宁(Christopher Manning)关于自然语言分析的第一堂课。 但是,以我的观点,在社交媒体和现代通用术语中普遍使用缩写词使这项工作变得容易一些。 诸如“ lol”和“ AFAIK”之类的缩写准确地表达了含义。 使用“大声笑”项目“有趣”和“ AFAIK”可能表示用户“不确定”他或她自己。

下面提供的代码使用Twitter4j api收听实时Twitter提要,使用Esper CEP收听事件并在达到阈值时提醒我们。 您可以从http://twitter4j.org/en/index.html下载twitter4j二进制文件或源文件,也可以从http://esper.codehaus.org/下载Esper。 在执行代码之前,请确保创建一个Twitter帐户(如果您没有的话),并在此处阅读Twitter的指南和概念及其流API。 Twitter目前仅允许通过用户名和密码组合进行身份验证,但是不久之后将逐步淘汰该方法,以支持oAuth身份验证。 另外,请密切注意其“访问和速率限制”部分。

以下代码在一个线程中使用流式API。 请不要同时使用其他线程,以免达到速率限制。 持续达到命中率限制可能会导致Twitter将您的Twitter ID列入黑名单。 同样重要的是要注意,流式API并不是以我们的方式发送每条推文。 Twitter通常会通过每10条发一条信息发送1条样本来对数据进行采样。 但是,对于我们来说这不是问题,只要我们对数据中的模式感兴趣,而不对任何特定的推文感兴趣。 Twitter为需要无速率限制的流数据的企业提供付费服务。 下图显示了数据的组成和处理。

图。 代码中尚未实现的图表和数据库
package com.sybase.simple;

public class HappyMessage {
 public String user;
 private final int ctr=1;
 public String getUser() {
  return user;
 }
 public void setUser(String user) {
  this.user = user;
 }
 public int getCtr() {
  return ctr;
 }
}

清单1.表示快乐事件的标准java bean。

package com.sybase.simple;

package com.sybase.simple;

import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.UpdateListener;

public class HappyEventListener implements UpdateListener{
 public void update(EventBean[] newEvents, EventBean[] oldEvents) {
  try {
   if (newEvents == null) {

    return;
   }
   EventBean event = newEvents[0];
   System.out.println("exceeded the count, actual " + event.get("sum(ctr)"));
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}

清单2.定义了Esper侦听器。

package com.sybase.simple;

package com.sybase.simple;

import java.io.IOException;

import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;

import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;

public class TwitterTest {
 static EPServiceProvider epService;

 public static void main(String[] args) throws TwitterException, IOException {

  // Creating and registering the CEP listener

  com.espertech.esper.client.Configuration config1 = new com.espertech.esper.client.Configuration();
  config1.addEventType("HappyMessage", HappyMessage.class.getName());
  epService = EPServiceProviderManager.getDefaultProvider(config1);
  String expression = "select user, sum(ctr) from com.sybase.simple.HappyMessage.win:time(10 seconds) having sum(ctr) > 2";

  EPStatement statement = epService.getEPAdministrator().createEPL(
    expression);
  HappyEventListener happyListener = new HappyEventListener();
  statement.addListener(happyListener);

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setDebugEnabled(true);
  //simple http form based authentication, you can use oAuth if you have one, check Twitter4j documentation
  cb.setUser("your Twitter user name here");
  cb.setPassword("Your Twitter password here");

  // creating the twitter listener

  Configuration cfg = cb.build();
  TwitterStream twitterStream = new TwitterStreamFactory(cfg)
    .getInstance();
  StatusListener listener = new StatusListener() {
   public void onStatus(Status status) {

    if (status.getText().indexOf("lol") > 0) {
     System.out.println("********* lol found *************");
     raiseEvent(epService, status.getUser().getScreenName(),
       status);
    }
   }

   public void onDeletionNotice(
     StatusDeletionNotice statusDeletionNotice) {
    System.out.println("Got a status deletion notice id:"
      + statusDeletionNotice.getStatusId());
   }

   public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
    System.out.println("Got track limitation notice:"
      + numberOfLimitedStatuses);
   }

   public void onScrubGeo(long userId, long upToStatusId) {
    System.out.println("Got scrub_geo event userId:" + userId
      + " upToStatusId:" + upToStatusId);
   }

   public void onException(Exception ex) {
    ex.printStackTrace();
   }
  };
  twitterStream.addListener(listener);

  //
  twitterStream.sample();

 }

 private static void raiseEvent(EPServiceProvider epService, String name,
   Status status) {
  HappyMessage msg = new HappyMessage();
  msg.setUser(status.getUser().getScreenName());
  epService.getEPRuntime().sendEvent(msg);
 }

}
}

清单3。

Twitter4j侦听器已创建。 此侦听器和CEP侦听器开始侦听。 每个Twitter帖子都被解析为“大声笑”。 每次找到“哈哈”,都会生成一个快乐事件。 每当最近10秒内“ lol”的总数超过2时,CEP侦听器都会发出警报。
该代码建立了一个长期运行的线程来获取Twitter提要。 每次达到阈值时,您都会在控制台上看到输出。 请记住要终止程序,它不会自行终止。

现在,您已经可以使用此基本功能,可以通过多种方式扩展此原型。 您可以处理其他数据提要(来自Twitter以外的其他来源),并使用Esper对来自两个数据提要的数据进行核对。 为了使输出具有视觉吸引力,您可以将输出提供给某些图表库。 例如,每次Esper识别事件时,数据点都将用于在折线图上渲染一个点。 如果以这种方式跟踪“快乐事件”,那么该图将本质上显示Twitter用户在一段时间内不断变化的快乐水平。

请在评论部分中提供您的反馈,并通过+1与他人分享,如果您希望看到更多有关此主题的信息,请告诉我。

参考:通过我们的JCG合作伙伴 使用Twitter4j和Esper跟踪Twitter上的用户情绪   Mahesh Gadgil在“ 简单而实用”博客上。


翻译自: https://www.javacodegeeks.com/2012/03/twitter4j-and-esper-tracking-user.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值