esper
管理大数据并从中挖掘有用的信息是当前技术中最热门的讨论主题。 来自Twitter,Facebook和Linkedin等社交网络的半结构化数据的爆炸式增长使Hadoop,Cassandra等技术成为每个技术对话的一部分。 为了不落后于竞争,所有以客户为中心的组织都在积极参与制定社会战略。
公司可以从社交网络中获取什么数据? 为初学者考虑基于位置的服务,定向广告和算法股权交易。 IDC Insights拥有一些有关大数据与业务分析之间关系的信息博客 。 Barb Darrow在gigaom.com上的博客文章中解释说,除非可以使用合适的分析工具进行筛选,否则大数据本身将毫无意义。
公司经常听取社交信息,以了解客户对产品的兴趣或看法。 他们还试图确定“影响者”(在社交图中联系最多的人),以便他们可以向此类人员提供更好的报价,并从他们的营销中获得更大的收益。 参与股票交易的公司想知道在Twitter上讨论了哪些公开贸易公司,以及用户对此的看法。
从IBM这样的大公司到规模较小的初创企业,每个人都在竞相利用大数据管理和分析的大部分机会。 Web上免费提供了许多有关大数据的文档,例如IBM“ Big数据平台”的这本电子书。 但是,其中很多仅涉及理论。 Jouko Ahvenainen在回应Barb Darrow的上述帖子时指出,“许多谈论大数据机会的人过于笼统,谈论的是更好的客户理解,更好的销售等。实际上,您必须非常具体,您利用什么以及如何使用”。
听起来合理,不是吗? 因此,我开始通过制作一个想法原型来进一步研究这一点,这是我知道的唯一好的选择。 如果我能做到,那么任何人都可以做到。 该代码非常简单。 但是,这就是重点。 自己编写CEP框架非常复杂,但使用起来却不是。 同样,Twitter使通过REST API获取信息变得非常容易。
大数据– http://www.bigdatabytes.com/managing-big-data-starts-here/ |
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 listenercom.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 documentationcb.setUser("your Twitter user name here");cb.setPassword("Your Twitter password here");// creating the twitter listenerConfiguration 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
esper