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.pswp.cn/news/373455.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373455.shtml
英文地址,請注明出處:http://en.pswp.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…

3.0 C++遠征:is a

4-4is_a 0.派生類Soldier繼承自基類Person //Person.h class Person { public:Person(string name "Jim");~Person();void play(); protected:string m_strName; };//Soldier.h class Soldier : public Person { public:Soldier(string name "James", in…

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 …

字節流轉化為文件流_C#文件轉換為字節流及字節流轉換為文件

本文講解了C#實現文件轉換為字節流的方法。文件轉換為字節流的步驟如下1、通過文件流打開指定文件(FileStream fs)&#xff1b;2、定義字節流(byte[] fileBytenew byte[fs.Length])&#xff1b;3、把文件讀取到字節流(fs.Read(fileByte,0,fileByte.Length))&#xff1b;4、關閉…

Spring和JSF集成:導航

我希望這是有關我在Spring和JavaServer Faces之間提供深度集成的努力的一系列博客中的第一篇。 這里提到的所有內容都是“正在進行中的工作”&#xff0c;因此&#xff0c;如果您簽出代碼&#xff0c;請注意它是一個不斷變化的目標。 期待一些粗糙的邊緣&#xff0c;如果有時會…

【CSS3動畫】transform對文字及圖片的旋轉、縮放、傾斜和移動

前言&#xff1a;之前我有寫過CSS3的transform這一這特性&#xff0c;對于它的用法&#xff0c;還不是很透徹&#xff0c;今天補充補充&#xff0c;呵呵 你懂的&#xff0c;小司機準備開車了。 a)再提一提transform的四個屬性 ①旋轉--->rotate(參數a)&#xff0c;單位deg&a…

宏的用法與簡介

預處理指令&#xff1a;例如&#xff1a;#include<stdio.h> #include<stdlib.h> #define MAX 20 ............. 因為他們由預處理器解釋的&#xff0c;所以稱作預處理指令。預處理器讀取源代碼&#xff0c;然后對其修改&#xff0c;并把修改過的…

django 日志寫入mysql_如何將django orm模型 寫入數據庫

1、指定連接pymysql(python3.x)先配置_init_.pyimport pymysqlpymysql.install_as_MySQLdb()2、配置連接mysql文件信息settings.pyDATABASES {default: {ENGINE: django.db.backends.mysql,NAME: django_orm, #你的數據庫名稱USER: root, #你的數據庫用戶名PASSWORD: , #你的數…

ORM的問題第2部分–查詢

在我以前關于對象關系映射工具&#xff08;ORM&#xff09;的帖子中&#xff0c;我討論了在處理當今常見的ORM&#xff08;包括Hibernate&#xff09;時遇到的各種問題。 其中包括與從POJO生成架構有關的問題&#xff0c;實際性能和不斷出現的維護問題。 本質上&#xff0c;結論…

【轉】如何減少接口響應時間

Premature optimization is the root of all evil. — Donald Knuth 對于程序優化&#xff0c;我一直采取保守的態度&#xff0c;除非萬不得已。但是隨著業務的不斷發展&#xff0c;程序越來越復雜&#xff0c;代碼越寫越多&#xff0c;優化似乎是終有一天會到來的事情。 那么對…

數據庫行轉列在現實需求中的用法

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的意思 是 查詢出所有客戶收款信息 然后按客戶分組 分組后 然后將這個客戶的所…

mysql生產環境加索引_【生產篇】_MySQL環境下如何查看基于表的索引定義

【引言】今天中午項目組來一需求&#xff0c;欲在MySQL環境的某張表下創建幾個BTREE索引。要創建索引&#xff0c;首先需要了解基表的表結構&#xff0c;以及已經包含的索引。Oracle的表結構大家都很熟悉&#xff0c;但MySQL表結構和已創建索引的查看怎么操作&#xff0c;本文將…

Hadoop模式介紹-獨立,偽分布式,分布式

了解了什么是Hadoop之后&#xff0c;讓我們在單機上啟動Hadoop&#xff1a; 這篇文章包含在ubuntu上安裝Hadoop的說明。 這是Hadoop安裝的快速分步教程。 在這里&#xff0c;您將獲得以獨立模式 &#xff08;單節點集群&#xff09;安裝Hadoop所需的所有命令及其說明&#xff0…

apk反編譯方式

一、Apk反編譯得到Java源代碼 下載上述反編譯工具包&#xff0c;打開apk2java目錄下的dex2jar-0.0.9.9文件夾&#xff0c;內含apk反編譯成java源碼工具&#xff0c;以及源碼查看工具。 apk反編譯工具dex2jar&#xff0c;是將apk中的classes.dex轉化成jar文件 源碼查看工具jdgui…