摘要:境外輿情對于我國的國際形象和國內(nèi)的穩(wěn)定具有重要作用,是國家安全的重要部分。通過對Twitter數(shù)據(jù)分析,該文設(shè)計了基于Twitter的境外輿情分析系統(tǒng)。該系統(tǒng)使用Twitter提供的APl數(shù)據(jù)作為數(shù)據(jù)源,使用自然語言處理的方法進行數(shù)據(jù)清洗,通過數(shù)據(jù)挖掘方法對數(shù)據(jù)進行大數(shù)據(jù)分析,最后通過工具進行可視化展示。
關(guān)鍵詞:社交網(wǎng)絡(luò);境外輿情分析;大數(shù)據(jù)挖掘;Twitter
中圖分類號:G350 文獻標識碼:A
文章編號:1009-3044(2020)27-0030-04
開放科學(xué)(資源服務(wù))標識碼(OSID):
1 背景
輿情是公眾對社會現(xiàn)象、問題、信仰、態(tài)度、情緒等的反應(yīng)。境外輿情對于我國的國際形象和國內(nèi)的穩(wěn)定具有重要作用,是國家安全的重要部分。通過境外輿情進行分析系統(tǒng),及時發(fā)現(xiàn)并處理不利于我國的輿論是十分必要的。
Twitter[1](官方中文譯名推特,但繁體中文和簡體中文的界面均記作Twitter)是一個社交網(wǎng)絡(luò)與微博服務(wù),它可以讓用戶更新不超過280個字符的消息(中文、日文和韓文為140個),這些消息也被稱作“推文(Tweet)”,是全球使用最多的社交網(wǎng)絡(luò)服務(wù)。
Twitter是互聯(lián)網(wǎng)上訪問量最大的十個網(wǎng)站之一,世界排名前100名的公司中已經(jīng)有73%出現(xiàn)在了Twitter上,比爾·蓋茨、Lady Gaga、FBI、美國紅十字會、卡塔爾半島電視臺等很多名人和組織都通過Twitter與大眾進行互動,甚至還有60余位國家首腦活躍其中。從個人的生活瑣事至官方代言、企業(yè)營銷,再到全球性的新聞事件,以Twitter為代表的微博網(wǎng)站作為互聯(lián)網(wǎng)Web2.0時代的最新的應(yīng)用,憑借其對信息傳播模式的變革影響著這個世界的溝通方式與生活方式。因此,Twitter數(shù)據(jù)十分適合進行境外輿情分析。
2 系統(tǒng)設(shè)計
通過對Twitter平臺進行分析。它與其他數(shù)據(jù)分析系統(tǒng)有相當(dāng)大的區(qū)別:
1 )Twitter在國內(nèi)無法訪問,需要使用境外代理服務(wù)。
2)Twitter數(shù)據(jù)是以數(shù)據(jù)流的方式進行傳輸,需要使用Twit-ter自身的數(shù)據(jù)傳輸接口[2-4]。
3 )Twitter數(shù)據(jù)的鍵值的特殊格式需要使用NoSQL方式進行存儲。
4)輿情分析主要任務(wù)包括發(fā)現(xiàn)目前流行的話題和話題的導(dǎo)向。
系統(tǒng)分為五個部分,系統(tǒng)結(jié)構(gòu)如圖1所示:
1)輿情數(shù)據(jù)抓取:使用python的tweepy[5]工具包來獲取Twitter數(shù)據(jù)。
2)輿情數(shù)據(jù)預(yù)處理:使用NLTK[6]工具包來進行數(shù)據(jù)預(yù)處理。
3)輿情數(shù)據(jù)存儲;使用NoSQL數(shù)據(jù)庫MongoDB[7]來存儲數(shù)據(jù)。
4)輿情數(shù)據(jù)分析:使用GemSim[8]發(fā)現(xiàn)輿情主題,使用vad-erSentiment[9]進行主題情感分析。
5)分析結(jié)果可視化:使用Flask[10]開發(fā)web應(yīng)用,使用mat-plotlib[11],D3.js[12]和wordcloudn3]來進行數(shù)據(jù)可視化。
2.1 Twitter數(shù)據(jù)抓取
基于Twitter Streaming API[6]的Twitter實時數(shù)據(jù)抓取。Twit-ter公司為了便于開發(fā)者使用Twitter的數(shù)據(jù),提供了開發(fā)者平臺,該平臺提供了不同的API接口,用于調(diào)取不同的Twitter數(shù)據(jù)。該接口分為兩大類:‘rwitter REST API和Twitter StreamingAPI。Twitter REST API用于讀寫Twitter數(shù)據(jù),包括用戶資料、用戶推文、用戶好友、用戶時間軸、檢索推文、地理位置信息、區(qū)域話題趨勢等等。Twitter REST API使用Twitter應(yīng)用和用戶提供的OAuth信息進行身份驗證,返回結(jié)果是JSON格式數(shù)據(jù)。Twitter Stream API用于實時的監(jiān)控和獲取Twitter數(shù)據(jù)流。
OAuth(開放授權(quán))是一個開放標準,允許用戶讓第三方應(yīng)用訪問該用戶在某一網(wǎng)站上存儲的私密的資源(如照片,視頻,聯(lián)系人列表),而無須將用戶名和密碼提供給第三方應(yīng)用。Twitter OAuth由以下四個部分組成:consumer key,consumer se-cret.access token和access token secret。JSON這種數(shù)據(jù)格式的特點是,冗余少,數(shù)據(jù)結(jié)構(gòu)清晰,非常適用于對數(shù)據(jù)的抽取分析。
Twitter的Streaming API提供給開發(fā)者獲取Twitter全球?qū)崟r數(shù)據(jù)流的途徑。通過該方法抓取的Twitter實時數(shù)據(jù)流,效率高質(zhì)量好,但由于抽樣獲取數(shù)據(jù)不齊全。Twitter Streaming API包括三個方面Public Streams,User Streams和Site Streams。一般使用Public Streams,Twitter Streaming API和REST API的區(qū)別如圖3,圖4所示。
為了便于使用本系統(tǒng)使用基于python實現(xiàn)的Twitter API工具包tweepy來調(diào)用Twitter Streaming API獲取實時數(shù)據(jù)。tweepy工具包可以使用地理坐標信息或關(guān)鍵詞信息來獲取實時數(shù)據(jù)。
2.2 Twitter數(shù)據(jù)預(yù)處理
Twitter數(shù)據(jù)文本含有很多標簽、注釋、標簽和地址等特殊符號的情況,綜合使用Python自然語言處理工具包NLTK和正則表達式等工具對其進行數(shù)據(jù)清洗。主要處理過程包括,提取詞元(token)、詞根化(stemming),保留表情、標簽等特殊符號,去停用詞.完整的Twitter數(shù)據(jù)預(yù)處理過程如圖4所示。
2.3 數(shù)據(jù)存儲
通過Twitter Streaming API抓取的數(shù)據(jù)格式JSON,先分析該JSON文件的結(jié)構(gòu),如表1所示。
從結(jié)構(gòu)中我們可以選出重要的字段,“text”推文的文本內(nèi)容,“created at”推文創(chuàng)建時間,“favorite count”喜愛的成員個數(shù),“retweet count”轉(zhuǎn)推成員個數(shù),“retweeted”是否被轉(zhuǎn)推,“Lang”語言,“id”推文的標識,“entities”推文中實體名:如URLs,hashtag,“place”推文發(fā)布位置信息,“user”推文發(fā)布者信息和“source”發(fā)送推特源等字段。
這種用JSON格式數(shù)據(jù)的鍵值性數(shù)據(jù),并不適合存儲在關(guān)系型數(shù)據(jù)庫中??梢源鎯Φ組ongoDB這樣的NoSQL型數(shù)據(jù)庫,使用它存儲twitter數(shù)據(jù)最大的好處是大大地壓縮存儲空間,而且對于大量數(shù)據(jù)可以提供強大的查詢操作和檢索機制,分析處理過程。
在python中使用pymongo[15]來對mongo dB數(shù)據(jù)庫進行操作,對于獲取的每一條twitter數(shù)據(jù)只需要將我們關(guān)心的推文內(nèi)容,地理位置,標簽,創(chuàng)建時間,語言,發(fā)送源等字段信息保存起來即可,大幅減少需要存儲的數(shù)據(jù)量。存儲在mongodb數(shù)據(jù)庫中狀態(tài),可以通過命令行查看(如圖5),也可以通過可視化軟件Rob0 3T[16](如圖6)來加以查看。
2.4 twitter熱點主題發(fā)現(xiàn)
隱含狄利克雷分布簡稱LDAn[17](Latent Dirichlet allocation),是一種主題模型,它可以將文檔集中每篇文檔的主題按照概率分布的形式給出。同時它是一種無監(jiān)督學(xué)習(xí)算法,在訓(xùn)練時不需要手工標注的訓(xùn)練集,需要的僅僅是文檔集以及指定主題的數(shù)量k即可。此外LDA的另一個優(yōu)點則是,對于每一個主題均可找出一些詞語來描述它。LDA方法原理示意圖如圖7所示。
LDA是一種典型的詞袋模型,即它認為一篇文檔是由一組詞構(gòu)成的一個集合,詞與詞之間沒有順序以及先后的關(guān)系。一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。
狄利克雷分布作為多項式分布的共軛先驗概率分布。因此正如LDA貝葉斯網(wǎng)絡(luò)結(jié)構(gòu)中所描述的,在LDA模型中一篇文檔生成的方式圖8所示。
但GemSim庫已經(jīng)提供了所有需要的基本功能。通過以下步驟使用GemSim提取LDA主題模型:
1)獲取語料。
2)文本預(yù)處理。
3)LDA分析。
4)顯示結(jié)果。
表2為使用GemSim建立里約2016奧運會LDA話題模型代碼示例。圖9為獲得的十大話題。
2.5 twitter情感分析
文本情感分析是以情感為計算對象,對文本的正面和負面情緒等不同情緒,通過工程方法進行分析處理,得出情感傾向性的計算過程。通常情況下,文本情感分析被當(dāng)作分類問題來處理。與常規(guī)的文本分類問題不同的是情感分類的類別標簽是情感因素。文本情感分析可分為二分類和多分類。前者是將文本情感分為正面和負面;后者是將情感細化為高興、悲傷、憤怒、害怕、憎恨等。按照文本情感分析的粒度大小,文本情感分析可劃分為詞語級別的情感分析、句子級別的情感分析和段落級別的情感分析。情感分析也稱為觀點挖掘,是自然語言處理的核心研究內(nèi)容之一。其研究目的是使用自然語言處理手段對文本中體現(xiàn)的個人觀點情感進行分析、評估。
為了高效地對twilter文本進行情感分析,本系統(tǒng)使用py—thon的基于情感詞典的VADER分析包vaderSentiment,進行情感分析,而且實驗證明它對于mitter這樣的微博分析尤其出色。其情感詞典不僅包括了很多的帶有很強感情色彩的詞語及對應(yīng)的分值比例還包括了twitter數(shù)據(jù)中可能會出現(xiàn)的表情符號的感情分值和比例,因此對于twilter的情感分析十分高效精確。開發(fā)vaderSentiment分析包的佐治亞理工學(xué)院的C.J.Hutto等人,通過實驗分析出對于小而多的社交網(wǎng)站數(shù)據(jù)的情感分析,使用vaderSentiment效果更好。
2.6 數(shù)據(jù)可視化
數(shù)據(jù)可視化是數(shù)據(jù)挖掘的一個重要的部分。數(shù)據(jù)可視化借助圖形化手段,清晰有效地傳達與溝通信息。數(shù)據(jù)可視化與信息圖形、信息可視化、科學(xué)可視化以及統(tǒng)計圖形等有密切關(guān)系。數(shù)據(jù)可視化為人類洞察數(shù)據(jù)的內(nèi)涵、理解數(shù)據(jù)蘊藏的規(guī)律提供了重要的手段。
本系統(tǒng)采用使用python T具包matplotlib實現(xiàn)數(shù)據(jù)分析可視化,使用JavaScript包D3.js實現(xiàn)數(shù)據(jù)動態(tài)可視化,使用python的wordcloud包實現(xiàn)詞云圖。
3 系統(tǒng)實現(xiàn)
通過本文設(shè)計的系統(tǒng)分析當(dāng)前編程語言的流行程度,得出在twitter上Java、Python、C++的正面、負面和一般評價。
3.1開發(fā)語言和環(huán)境
開發(fā)語言主要為python,開發(fā)環(huán)境如表3所示。
3.2實驗結(jié)果
通過抓取得到4個小時的twitter數(shù)據(jù)。圖10為對編程語言的分析結(jié)果python在twitter上關(guān)注度最高,其次是Java,最后是C++,這也與現(xiàn)實中python目前是最熱門的編程語言相符。對于三種編程語言的正負面評價,對于python的正面評價最高。
4 總結(jié)
本文設(shè)計并實現(xiàn)了基于Twitter大數(shù)據(jù)的境外輿情分析系統(tǒng),通過實例證明了該系統(tǒng)可以較好地滿足要求。但本系統(tǒng)只可以使用文字信息,為了將要研究如何將Twitter圖片和視頻信息也進行分析和處理,這將取得更好的效果。
參考文獻:
[1] Twitter[EB/OL]. [2020-02-20]. https://zh. wikipedia. org/wiki/Twitter.
[2] Ali D. Mining the social web: data mining facebook, twitter, Linkedln, google+ , github, and more, by Matthew A. RusseII[J].Journal of Information Privacy and Security, 2015, 11(2): 137- 138.
[4] Twitter development document[EB/OLl. [2020-02-20l. https://dev.twitter.com/overview/documentation.
[5] Tweepy: an easy-to-use python library for accessing the twit-ter api[EB/OL].[2020-02-20].http://www.tweepy.org/.
[6] N LTK[E B/OLl.[2020-02-20l.https ://www.nltk.org/.
[7] Mongodb[E B/OL].[2020-02-20].https://www.mongodb.com/e n.
[8] GemSim[EB/OLl. [2020-02-20]. https://sourceforge. net/projects/gemsim/.
[9] VaderSentiment[EB/OL]. [2020-02-20]. https://github. com/vad-erSentiment.
[10] flask[E B/O L].[2020-02-20l.http://flask.pocoo.org/.
[11] matplotlib[EB/OL].[2020-02-20l.https://matplotlib.org/.
[12] d3.j s[E B/OLl.[2020-02-20l.https://d3j s.org/.
[13] wordcloud[EB/OL]. [2020-02-20]. https://amueller. github. io/word_cloud/.
[14] "Twitter's API - HowStuffWorks[EB/OL].[2020-02-20].https://computer. howstuffworks. com/intemet/social-networking/net-works/twitter2.htm.
[15] pymongo[EB/OL]. [2020-02-20]. https://api. mongodb. com/py-thon/current/tutorial.html.
[16] Rob0 3T[EB/OLl.[2020-02-20].https://robomongo.org/.
[17] LDA[EB/OL]. [2020-02-20]. https://en. wikipedia. org/wiki/La-tent_Dirichlet_allocation.
作者簡介:劉斌(1983-),男,中級工程師,碩士,研究方向為大數(shù)據(jù)挖掘、自然語言處理。