從 500 萬條的微博語料對鹿晗、關曉彤微博的熱門評論進行情感分析
關鍵時刻,第一時間送達!
最近身邊的人都在談論一件事:10月8日中午的一條微博,引發了一場微博的軒然大波。導致微博癱瘓的原因是全球超人氣偶像明星鹿晗發了一條「大家好,給大家介紹一下,這是我女朋友@關曉彤」。這條微博並@關曉彤。數據分析,可以在這裡(https://wfx.51wyq.cn/share/view/j3qLuwlKZ1mDoQBJa)自取!
截止目前,鹿晗的這條微博已經被轉發1024887,回復2649409,點贊5173532。
關曉彤的這條微博轉發67652,回復873532,點贊:2260400。
這麼龐大的數據量相當上億的「肉雞」(粉們和吃瓜群眾)對微博的一次「攻擊」。
難怪微博工程師要一邊結婚一邊工作,都是鹿晗這條微博惹的禍。最後加了1000台伺服器暫時頂住了。
這條微博評論非常的多了,大家對這件事態度怎麼樣?我們利用數據來分析一下。
原料:
鹿晗微博3萬條評論;
關曉彤微博3萬條評論;
500萬微博語料,下載地址(https://pan.baidu.com/share/init?surl=eSeXh5K),密碼:tvdo
工具:
Python3.6
SnowNLP(https://github.com/isnowfy/snownlp可方便的處理中文文本內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這裡沒有用NLTK,所有的演算法都是自己(不是本人)實現的,並且自帶了一些訓練好的字典。)
WordCloud,詞雲。
實施過程:
1. 對微博語料進行情感分類,可以基於原有SnowNLP進行積極和消極情感分類:積極情緒類:pos.txt和消極情緒類:neg.txt 然後進行訓練:
from snownlp import sentiment
sentiment.train( neg.txt , pos.txt )
sentiment.save( sentiment.marshal )
在snownlp/sentiment/init.py中第11行改到你訓練的文件。
2.爬取兩人的微博數據,使用http://m.weibo.com,解決懶載入問題,具體方式不在贅述,google 一下吧。
a. 微博提供了介面地址,微博提供API 地址,通過介面返回標準的json數據
{
"comments": [
{
"created_at": "Wed Jun 01 00:50:25 +0800 2011",
"text": "love your work.......",
"source": "新浪微博",
"user": {
"screen_name": "zaku",
"name": "zaku",
"province": "11",
"city": "5",
"location": "北京 朝陽區",
"description": "人生五十年,乃如夢如幻;有生斯有死,壯士復何憾。",
"domain": "zaku",
"gender": "m",
"followers_count": 1204,
"friends_count": 447,
"statuses_count": 2908,
"favourites_count": 0,
"created_at": "Fri Aug 28 00:00:00 +0800 2009",
"following": false,
"allow_all_act_msg": false,
"remark": "",
"geo_enabled": true,
"verified": false,
"allow_all_comment": true,
"verified_reason": "",
"follow_me": false,
"online_status": 0,
"bi_followers_count": 215
},
"status": {
"created_at": "Tue May 31 17:46:55 +0800 2011",
"text": "求關注。",
"source": "新浪微博",
"favorited": false,
"truncated": false,
"in_reply_to_status_id": "",
"in_reply_to_user_id": "",
"in_reply_to_screen_name": "",
"geo": null,
"reposts_count": 8,
"comments_count": 9,
"annotations": [],
"user": {
"screen_name": "zaku",
"name": "zaku",
"province": "11",
"city": "5",
"location": "北京 朝陽區",
"description": "人生五十年,乃如夢如幻;有生斯有死,壯士復何憾。",
"domain": "zaku",
"gender": "m",
"followers_count": 1204,
"friends_count": 447,
"statuses_count": 2908,
"favourites_count": 0,
"created_at": "Fri Aug 28 00:00:00 +0800 2009",
"following": false,
"allow_all_act_msg": false,
"remark": "",
"geo_enabled": true,
"verified": false,
"allow_all_comment": true,
"verified_reason": "",
"follow_me": false,
"online_status": 0,
"bi_followers_count": 215
}
}
},
...
],
"previous_cursor": 0,
"next_cursor": 0,
"total_number": 7
}
目前微博沒有要求登錄(可能是bug哦),建議sleep一下,否則很容易被微博大廠識別為爬蟲行為二被封堵;b.數據存儲,python很方便,可以存儲在文本,mysql等資料庫中。但是微博大廠在介面返回數據中會返回一些重複的和一些空數據,所以這部分需要處理一下。建議放在資料庫中,去重和清理空的數據非常方便。可以使用sql進行處理:
去重複內容:
DELETE from 表名 where id not in (select minid from (select min(id) as minid from 表名 group by 欄位) b);
去值為NULL:
delete from 表名 where 欄位名=NULL
去值為""空值
delete from 表名 where 欄位名=
3. 情感分析:
讀取每段評論並依次進行情感值分析,生成一個0-1之間的值,當值大於0.5時代表句子的情感極性偏向積極,當分值小於0.5時,情感極性偏向消極,當然越偏向倆頭,情緒越偏激。
鹿晗微博評論情感分析
看出支持、祝福和反對、消極的的聲音基本保持平衡。(由於語料樣本的數量,分析存在一定誤差,感興趣的同學一起完善情感樣本庫。)
詞雲中出現祝福、喜歡、支持等關鍵詞,也出現分手等一些詞。
關曉彤微博微博評論情感分析
祝福、贊成的積極的情緒,分值大多高於0.5,而期盼分手或者表達消極情緒的分值,大多低於0.5。從圖上來看已經是一邊到的態勢。
關曉彤微博微博評論詞雲
從詞雲上來看,出現很多李易峰,不配,討厭的聲音。
-------- 熱聞回顧 --------
※AI 預測的七宗致命罪惡
※十年一顧,iOS與Android 這樣改變了我們
※從抗美援朝到圖形圖像、演算法,84 歲老爺爺的跨越性技術之路
TAG:CSDN |