Twitter4j和Esper:在Twitter上跟踪用户情绪
管理大數(shù)據(jù)并從中挖掘有用的信息是當(dāng)前技術(shù)中最熱門(mén)的討論主題。 來(lái)自Twitter,Facebook和Linkedin等社交網(wǎng)絡(luò)的半結(jié)構(gòu)化數(shù)據(jù)的爆炸式增長(zhǎng)使Hadoop,Cassandra等技術(shù)成為每個(gè)技術(shù)對(duì)話的一部分。 為了不落后于競(jìng)爭(zhēng),所有以客戶為中心的組織都在積極參與制定社會(huì)戰(zhàn)略。
公司可以從社交網(wǎng)絡(luò)中獲取什么數(shù)據(jù)? 為初學(xué)者考慮基于位置的服務(wù),定向廣告和算法股權(quán)交易。 IDC Insights擁有一些有關(guān)大數(shù)據(jù)與業(yè)務(wù)分析之間關(guān)系的信息博客 。 Barb Darrow在gigaom.com上的博客文章中解釋說(shuō),大數(shù)據(jù)本身將是毫無(wú)意義的,除非可以使用合適的分析工具進(jìn)行篩選。
公司通常會(huì)聽(tīng)取社交信息,以了解客戶對(duì)產(chǎn)品的興趣或看法。 他們還試圖確定“影響者”(在社交圖中聯(lián)系最多的人),以便他們可以向此類人員提供更好的報(bào)價(jià),并從他們的營(yíng)銷(xiāo)中獲得更大的收益。 從事股票交易的公司想知道在Twitter上討論了哪些公開(kāi)貿(mào)易公司,以及用戶對(duì)此的看法。
從像IBM這樣的大公司到規(guī)模較小的新興企業(yè),每個(gè)人都在競(jìng)相利用大數(shù)據(jù)管理和分析的大部分機(jī)會(huì)。 可以從Web上免費(fèi)獲得許多有關(guān)大數(shù)據(jù)的文檔,例如IBM'Big Data Platform'的電子書(shū)。 但是,其中很多僅涉及理論。 Jouko Ahvenainen在回應(yīng)Barb Darrow的上述帖子時(shí)指出,“許多談?wù)摯髷?shù)據(jù)機(jī)會(huì)的人過(guò)于籠統(tǒng),談?wù)摰氖歉玫目蛻衾斫?#xff0c;更好的銷(xiāo)售等。實(shí)際上,您必須非常具體,您利用什么以及如何使用”。
聽(tīng)起來(lái)合理,不是嗎? 因此,我開(kāi)始通過(guò)制作一個(gè)想法原型來(lái)進(jìn)一步研究這一點(diǎn),這是我知道的唯一好的選擇。 如果我能做到,那么任何人都可以做到。 該代碼非常簡(jiǎn)單。 但是,這就是重點(diǎn)。 自己編寫(xiě)CEP框架非常復(fù)雜,但使用起來(lái)卻不是。 同樣,Twitter使通過(guò)REST API獲取信息變得非常容易。
| 大數(shù)據(jù)– http://www.bigdatabytes.com/managing-big-data-starts-here/ |
Iphone從來(lái)沒(méi)有變好。
Iphone從未 如此出色。
如您所見(jiàn),在句子中僅添加一個(gè)單詞就完全改變了含義。 因此,自然語(yǔ)言處理被認(rèn)為是計(jì)算機(jī)科學(xué)中最棘手的問(wèn)題之一。 您可以使用斯坦福大學(xué)提供的免費(fèi)在線講座來(lái)學(xué)習(xí)“自然語(yǔ)言處理”。 該鏈接直接帶您進(jìn)入克里斯托弗·曼寧(Christopher Manning)關(guān)于自然語(yǔ)言分析的第一堂課。 但是,以我的觀點(diǎn),在社交媒體和現(xiàn)代通用術(shù)語(yǔ)中普遍使用縮寫(xiě)詞使這項(xiàng)工作變得容易一些。 諸如“ lol”和“ AFAIK”之類的縮寫(xiě)準(zhǔn)確地表達(dá)了含義。 使用“大聲笑”項(xiàng)目“有趣”和“ AFAIK”可能表示用戶“不確定”他或她自己。
下面提供的代碼使用Twitter4j api收聽(tīng)實(shí)時(shí)Twitter提要,使用Esper CEP收聽(tīng)事件并在達(dá)到閾值時(shí)提醒我們。 您可以從http://twitter4j.org/en/index.html下載twitter4j二進(jìn)制文件或源文件,也可以從http://esper.codehaus.org/下載Esper。 在執(zhí)行代碼之前,請(qǐng)確保創(chuàng)建一個(gè)Twitter帳戶(如果您沒(méi)有的話),并在此處閱讀Twitter的指南和概念及其流API。 Twitter目前僅允許通過(guò)用戶名和密碼組合進(jìn)行身份驗(yàn)證,但是不久之后將逐步淘汰該方法,以支持oAuth身份驗(yàn)證。 另外,請(qǐng)密切注意其“訪問(wèn)和速率限制”部分。
以下代碼在一個(gè)線程中使用流式API。 請(qǐng)不要同時(shí)使用其他線程,以免達(dá)到速率限制。 持續(xù)達(dá)到命中率限制可能會(huì)導(dǎo)致Twitter將您的Twitter ID列入黑名單。 同樣重要的是要注意,流式API并不是以我們的方式發(fā)送每條推文。 Twitter通常會(huì)通過(guò)每10條發(fā)一條信息發(fā)送1條樣本來(lái)對(duì)數(shù)據(jù)進(jìn)行采樣。 但是,對(duì)于我們來(lái)說(shuō)這不是問(wèn)題,只要我們對(duì)數(shù)據(jù)中的模式感興趣,而不對(duì)任何特定的推文感興趣。 Twitter為需要無(wú)速率限制的流數(shù)據(jù)的企業(yè)提供付費(fèi)服務(wù)。 下圖顯示了數(shù)據(jù)的組成和處理。
| 圖。 代碼中尚未實(shí)現(xiàn)的圖表和數(shù)據(jù)庫(kù) |
清單1.表示快樂(lè)事件的標(biāo)準(zhǔn)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偵聽(tīng)器。
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偵聽(tīng)器已創(chuàng)建。 此偵聽(tīng)器和CEP偵聽(tīng)器開(kāi)始偵聽(tīng)。 每個(gè)Twitter帖子都被解析為“大聲笑”。 每次找到“哈哈”,都會(huì)生成一個(gè)快樂(lè)事件。 每當(dāng)最近10秒內(nèi)“ lol”的總數(shù)超過(guò)2時(shí),CEP偵聽(tīng)器都會(huì)發(fā)出警報(bào)。
該代碼建立了一個(gè)長(zhǎng)期運(yùn)行的線程來(lái)獲取Twitter提要。 每次達(dá)到閾值時(shí),您都會(huì)在控制臺(tái)上看到輸出。 請(qǐng)記住要終止程序,它不會(huì)自行終止。
現(xiàn)在,您已經(jīng)可以使用此基本功能,可以通過(guò)多種方式擴(kuò)展此原型。 您可以處理其他數(shù)據(jù)提要(來(lái)自Twitter以外的其他來(lái)源),并使用Esper對(duì)來(lái)自兩個(gè)數(shù)據(jù)提要的數(shù)據(jù)進(jìn)行核對(duì)。 為了使輸出具有視覺(jué)吸引力,您可以將輸出提供給某些圖表庫(kù)。 例如,每次Esper識(shí)別事件時(shí),數(shù)據(jù)點(diǎn)都將用于在折線圖上渲染一個(gè)點(diǎn)。 如果以這種方式跟蹤“快樂(lè)事件”,那么該圖將本質(zhì)上顯示Twitter用戶在一段時(shí)間內(nèi)不斷變化的快樂(lè)水平。
請(qǐng)?jiān)谠u(píng)論部分中提供您的反饋,并通過(guò)+1與他人分享,如果您希望看到更多有關(guān)此主題的信息,請(qǐng)告訴我。
參考:通過(guò)我們的JCG合作伙伴 使用Twitter4j和Esper跟蹤Twitter上的用戶情緒 ? Mahesh Gadgil在“ 簡(jiǎn)單而實(shí)用”博客上。
翻譯自: https://www.javacodegeeks.com/2012/03/twitter4j-and-esper-tracking-user.html
總結(jié)
以上是生活随笔為你收集整理的Twitter4j和Esper:在Twitter上跟踪用户情绪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么修改wifi密码如何修改路由器的账号
- 下一篇: 云上的播放框架变得简单:Openshif