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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI

Laravel-Gii 可视化代码生成工具 CRUD GUI适用于快速B端后台开发,根据MySQL的表结构生成对应的Model、Observer、Controller、View、Route等相关项目文件[TOC]注意因为是解析MySQL的表结构,并且根据字段生成模板,所以目前生成的Model类时只支…

20145231第二周Java学习笔记

20145231 《Java程序设计》第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客。 第三章:基础语法 知识点比较多比较零碎,整理的都是实际操作中可…

JavaFX 2.0和Scala,像牛奶和饼干

JavaFX 2.0和Scala都是很好的技术,但是一起使用时效果会更好。 JavaFX 2.0是一种功能强大的富客户端技术,具有先进的图形,动画和媒体功能。 Scala是一种简单但功能强大的语言,具有用于编写特定于域的语言(DSL&#xff…

ASP.NET WebAPi之断点续传下载(上)

前言 之前一直感觉断点续传比较神秘,于是想去一探究竟,不知从何入手,以为就写写逻辑就行,结果搜索一番,还得了解相关http协议知识,又花了许久功夫去看http协议中有关断点续传知识,有时候发觉东西…

贪吃蛇(C++实现,VC6.0编译,使用了EasyX图形库)

程序效果&#xff1a; 代码&#xff1a; //main.cpp 1 #include <iostream>2 #include<fstream>3 #include <graphics.h>4 #include <conio.h>5 #include<ctime>6 #include<windows.h>7 #include<mmsystem.h>8 #pragma comment(lib…

python中sorted的用法append_python sorted()排序详解

排序&#xff0c;在编程中经常遇到的算法&#xff0c;我也在几篇文章中介绍了一些关于排序的算法。有的高级语言内置了一些排序函数。本文讲述Python在这方面的工作。供使用内置函数sorted()/list.sort()的使用简单应用python对list有一个内置函数&#xff1a;>>> a[5…

云上的播放框架变得简单:Openshift模块

仅仅几年前&#xff0c;找到一个负担得起的Java Web应用程序托管解决方案是一项艰巨的任务&#xff0c;而寻找免费的托管解决方案是一项不可能的任务。 更不用说甚至考虑自动缩放&#xff0c;单命令部署&#xff0c;持续集成等事情&#xff0c;这都是科幻小说。 去年见证了云计…

C#中的yield return与Unity中的Coroutine(协程)(下)

Unity中的Coroutine&#xff08;协程&#xff09; 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件&#xff0c; Image&#xff1a; 将以下代码绑定到Image 1 using UnityEngine;2 using System.Collections;3 using System.Threading;4 using …

【CSS3动画】transform对文字及图片的旋转、缩放、倾斜和移动

前言&#xff1a;之前我有写过CSS3的transform这一这特性&#xff0c;对于它的用法&#xff0c;还不是很透彻&#xff0c;今天补充补充&#xff0c;呵呵 你懂的&#xff0c;小司机准备开车了。 a)再提一提transform的四个属性 ①旋转--->rotate(参数a)&#xff0c;单位deg&a…

数据库行转列在现实需求中的用法

select t.客户姓名,sum(case when t.收款类型首款 then t.金额 else 0 end as 首款),sum(case when t.收款类型尾款 then t.金额 else 0 end as 尾款) from table t group by t.客户姓名 这段sql的意思 是 查询出所有客户收款信息 然后按客户分组 分组后 然后将这个客户的所…

apk反编译方式

一、Apk反编译得到Java源代码 下载上述反编译工具包&#xff0c;打开apk2java目录下的dex2jar-0.0.9.9文件夹&#xff0c;内含apk反编译成java源码工具&#xff0c;以及源码查看工具。 apk反编译工具dex2jar&#xff0c;是将apk中的classes.dex转化成jar文件 源码查看工具jdgui…

ADF声明性组件示例

在我以前的文章中&#xff0c;我答应展示如何为智能值列表创建ADF声明性组件。 因此&#xff0c;我将创建一个包含三个元素的组件&#xff1a;标签&#xff0c;输入文本和值的组合框列表。 那很容易。 我在工作空间中创建了一个单独的ADF ViewController项目&#xff1a; 在此项…

Solr集群更新配置的方式

solr集群中配置文件是经常更新的&#xff0c;频率最高的也就是schema.xml和solrconfig.xml这两个配置文件了&#xff0c;对于更新配置文件之前&#xff0c;我们先了解一下集群项目结构 由于在集群模式下&#xff0c;solrconfig.xml和schema.xml等配置文件都由Zookeeper集群管理…

java文本框双击可编辑_java swing 文本域双击变为可编辑

java swing如何实现文本域双击变为可编辑呢?给文本域添加鼠标事件监听程序即可:resultTA1new AssistPopupTextArea();resultTA1.setEditable(false);resultTA1.setLineWrap(true);resultTA1.setWrapStyleWord(true);resultTA1.addMouseListener(new MouseAdapter() {Overridep…

OSGi简介–模块化Java

OSGi联盟是这一搁浅的管理机构&#xff0c;它始于1999年。其最初目标是为网络设备创建开放搁浅。 基于此思想&#xff0c;此规范也针对Java引入。 Eclipse在Java中是第一个。 他们于2004年6月推出了基于OSGi的Eclipse IDE。 OSGi是在Java中定义动态模块的方法。 主要为Java实现…

HDU FatMouse's Speed 基本DP

题意&#xff1a;要求找到的体重递增&#xff0c;速度递减的老鼠&#xff0c;并且输出最长的长度数&#xff0c;而且输出各自的序列数。Special Judge 思路&#xff1a;先按体重由小到大排序&#xff0c;再找最长速度递减序列。 转移方程&#xff1a;mou[i].w>mou[j].w&am…

java xmpp openfire_搭建Xmpp服务器Openfire

step1、 安装java环境这里是检测是否安装java的网页如没有安装则进行以下步骤1、下载jdk7的mac版&#xff1a;jdk-7u79-macosx-x64.dmg2、安装好之后&#xff0c;在命令行进入以下路径查看#cd /Library/Java/JavaVirtualMachines/3、再查看你自己安装的版本#ls版本为jdk-8u171-…

Spark程序运行报错解决(1)

报错内容&#xff1a;System memory 259522560 must be at least 4.718592E8. Please use a larger heap size. 解决&#xff1a;Window——Preference——Java——Installed JREs——选中一个Jre 后 Edit 在Default VM arguments 里加入&#xff1a;-Xmx512M 转载于:https://w…

java setsolinger_java socket 的参数选项解读(转)

在MulticastSocket的源代码里有设置多播的方法&#xff1a;public void setInterface(InetAddress inf) throwsSocketException {if(isClosed()) {throw new SocketException("Socket is closed");}checkAddress(inf, "setInterface");synchronized(infLoc…

【转】Linux终端下 dstat 监控工具

转自https://linux.cn/article-3215-1.html dstat 是一个可以取代vmstat&#xff0c;iostat&#xff0c;netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能&#xff0c;增加了监控项&#xff0c;也变得更灵活了。dstat可以很方便监控系统…