Python情感分析:鹿晗的粉絲們究竟原諒他了嗎?
國慶長假的最後一天,鹿晗在微博上公開宣布和關曉彤的戀情。消息來得太突然,不僅粉絲圈裡炸了,順帶連微博伺服器也給炸了。在此心疼新浪運維工程師一秒,放個假都不能省心。
這條微博讓粉絲們心情複雜,卻讓各路媒體們集體高潮,從各種刁鑽的角度進行了全方位的報道和評論,蹭熱點的姿勢令人眼花繚亂。(在這點上不得不承認,我們是個不稱職的公眾號,到今天才有了這麼一篇分析。)
到目前,這條微博已經有了280多萬條評論。有點贊祝福的,有質疑的,當然也少不了悲痛欲絕,甚至表示取關粉轉路人的。那麼究竟粉絲們對此事的態度如何,真的「原諒」鹿晗了嗎?於是,我們編程教室的小夥伴用 python 對評論里的情緒做了個簡單的統計分析。
先說我們的結論:原諒?不存在!
此微博的評論中負面情緒較多,說明還是被扎心的粉絲們佔了多數,不是一時半會兒就能「原諒」的。這也是符合主觀感受的。引用一個熱評來說就是「3909萬粉絲,一起失戀了」。
這是我們通過一些數據分析得出的結論,到底是不是可信,可以一起來看下我們的分析過程。
1. 抓取微博評論
抓取微博使用了爬蟲框架 scrapy,並結合 mongodb 作為數據存儲。通常來說,手機版網頁會比 PC 版網頁更容易抓取數據,所以我們通過 http://m.weibo.cn 找到了此條微博的評論數據介面:
https://m.weibo.cn/api/comments/show?id=4160547165300149&page=1n
通過修改 page 參數,可以獲取各頁評論。
得到數據之後,通過正則或 bs4 對信息進行提取(我們的代碼里用了正則),將評論內容文本存入資料庫。
2. 情感分析
2.1 snownlp
首先我們使用了 python 的一個情感分析庫 snownlp。在開發過程中,我們看到知乎上也有人做了同樣的工作:
- 用python對鹿晗、關曉彤微博進行情感分析 - 宅米RICE
- 利用500W條微博語料對評論進行情感分析 - 佈道
snownlp(https://github.com/isnowfy/snownlp)是一個可以方便處理中文文本的 python 庫,提供了分詞、詞性標註、情感分析、文本分類、轉拼音、繁轉簡、提取關鍵詞、摘要等功能,功能十分強大。
分析結果:
圖中情感值越接近 0 表示越消極,越接近 1 表示越積極。從結果來看,0、1 兩端和中間 0.5 的數量最多,整體上較為平衡,稍稍偏積極一些。
可真的是這樣嗎?
我們來挑幾熱門評論嘗試下:
- 大家覺得是假的點贊 0.99
- 大家覺的鹿晗與關曉彤不配的請點贊。 0.48
- 一定是電視劇的宣傳。一定是。 0.39
- 不喜歡關曉彤的贊我 0.80
- 哥哥 我們心臟不好 0.98
- 同意戀愛,關曉彤就算了吧。 0.55
- 如果不是關曉彤。。我覺得我還沒那麼心痛!人生的悲哀就是最喜歡的和最討厭的在一起了 0.81
這好像不大對吧。
後來進一步了解發現,snownlp 的默認訓練語料庫是針對網上商品的購買評價,將其得出的模型用在此微博評論的分析上並不是很準確。於是我們又從網上找了一份針對騰訊微博上新聞事件評價的語料庫,來修正訓練數據。但可惜因為樣本量較少,並且也不是很符合此場景,因此結果和上述差別不大。
我們上面提到的兩篇文章,結論也與此類似。如果要進一步提升 snownlp 準確性,則需要一定數量的手動標記樣本。
2.2 騰訊文智
那如果一時沒有那麼多的標記樣本,有沒有其他方法?我們找到了「騰訊文智」 — 騰訊出品的中文語義平台,支持 NLP、轉碼、抽取、全網數據抓取等中文語義分析需求。這個平台是收費的,不過有一些免費配額,足夠我們做一些小的實驗分析。
在使用之前,我們也將前文的幾條熱評測試了一下:
我們來挑幾熱門評論嘗試下:
- 大家覺得是假的點贊 0.52
- 大家覺的鹿晗與關曉彤不配的請點贊。 0.53
- 一定是電視劇的宣傳。一定是。 0.50
- 不喜歡關曉彤的贊我 0.62
- 哥哥 我們心臟不好 0.02
- 同意戀愛,關曉彤就算了吧。 0.48
- 如果不是關曉彤。。我覺得我還沒那麼心痛!人生的悲哀就是最喜歡的和最討厭的在一起了 0.35
從這幾個例子來看,文智相對要準確一點,雖然有些評論依然沒有被劃歸到負面,但至少沒有給到很誇張的積極情感值。
由於文智的數量限制,我們對數據中進行了隨機抽樣,用一小部分數據進行分析,並且過濾掉了情感值為 0.5 的部分(其中有不少是純表情回復),得到如下結果:
儘管在手動測試時發現文智的預測會略偏積極,但即便如此,最終的結果依然偏向消極。由此推斷,實際的情感可能比這個分布更加負面。這也就是我們文章開始時給出的結論。
這個結論其實並沒有多大意義(反正我也不粉鹿晗),但通過程序來做情感分析,也許你會用得到。
獲取源碼和詳細文檔,請在公眾號(Crossin的編程教室)中回復 鹿晗。
════
其他文章及回答:
用 Python 解讀十九工作報告
Python有嘻哈:Crossin教你用代碼寫出押韻的verse
聽說你好不容易寫了個爬蟲,結果沒抓幾個就被封了? 喏,你們要的 PyCharm 快速上手指南 編程新手:看懂很多示例,卻依然寫不好一個程序 給伸手黨的福利:Python 新手入門引導 如何用100行Python代碼做出魔性聲控遊戲「八分音符醬」 學習編程的過程中可能會走哪些彎路,有哪些經驗可以參考? 你是如何自學 Python 的?
Crossin的編程教室
微信公眾號ID:crossincode
網站:crossincode.comQQ群:657099683
微信加群:crossin123(新手/進階/爬蟲)
推薦閱讀:
※鹿晗的告白——偶像體系的秩序與分裂
※如何看待鹿晗成為世界最帥面孔第九名?
※《擇天記》這麼火,鹿晗的唇色簡直不要太好看!
※看見這麼多人都喊著你的名字,我也就放心了。
※對於微博而言,「頭條獨享」或許並不是什麼好事