Python情感分析:鹿晗的粉絲們究竟原諒他了嗎?

國慶長假的最後一天,鹿晗在微博上公開宣布和關曉彤的戀情。消息來得太突然,不僅粉絲圈裡炸了,順帶連微博伺服器也給炸了。在此心疼新浪運維工程師一秒,放個假都不能省心。

這條微博讓粉絲們心情複雜,卻讓各路媒體們集體高潮,從各種刁鑽的角度進行了全方位的報道和評論,蹭熱點的姿勢令人眼花繚亂。(在這點上不得不承認,我們是個不稱職的公眾號,到今天才有了這麼一篇分析。)

到目前,這條微博已經有了280多萬條評論。有點贊祝福的,有質疑的,當然也少不了悲痛欲絕,甚至表示取關粉轉路人的。那麼究竟粉絲們對此事的態度如何,真的「原諒」鹿晗了嗎?於是,我們編程教室的小夥伴用 python 對評論里的情緒做了個簡單的統計分析。

先說我們的結論:原諒?不存在!

此微博的評論中負面情緒較多,說明還是被扎心的粉絲們佔了多數,不是一時半會兒就能「原諒」的。這也是符合主觀感受的。引用一個熱評來說就是「3909萬粉絲,一起失戀了」。

這是我們通過一些數據分析得出的結論,到底是不是可信,可以一起來看下我們的分析過程。

1. 抓取微博評論

抓取微博使用了爬蟲框架 scrapy,並結合 mongodb 作為數據存儲。通常來說,手機版網頁會比 PC 版網頁更容易抓取數據,所以我們通過 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(github.com/isnowfy/snow)是一個可以方便處理中文文本的 python 庫,提供了分詞、詞性標註、情感分析、文本分類、轉拼音、繁轉簡、提取關鍵詞、摘要等功能,功能十分強大。

分析結果:

圖中情感值越接近 0 表示越消極,越接近 1 表示越積極。從結果來看,0、1 兩端和中間 0.5 的數量最多,整體上較為平衡,稍稍偏積極一些。

可真的是這樣嗎?

我們來挑幾熱門評論嘗試下:

  1. 大家覺得是假的點贊 0.99
  2. 大家覺的鹿晗與關曉彤不配的請點贊。 0.48
  3. 一定是電視劇的宣傳。一定是。 0.39
  4. 不喜歡關曉彤的贊我 0.80
  5. 哥哥 我們心臟不好 0.98
  6. 同意戀愛,關曉彤就算了吧。 0.55
  7. 如果不是關曉彤。。我覺得我還沒那麼心痛!人生的悲哀就是最喜歡的和最討厭的在一起了 0.81

這好像不大對吧。

後來進一步了解發現,snownlp 的默認訓練語料庫是針對網上商品的購買評價,將其得出的模型用在此微博評論的分析上並不是很準確。於是我們又從網上找了一份針對騰訊微博上新聞事件評價的語料庫,來修正訓練數據。但可惜因為樣本量較少,並且也不是很符合此場景,因此結果和上述差別不大。

我們上面提到的兩篇文章,結論也與此類似。如果要進一步提升 snownlp 準確性,則需要一定數量的手動標記樣本。

2.2 騰訊文智

那如果一時沒有那麼多的標記樣本,有沒有其他方法?我們找到了「騰訊文智」 — 騰訊出品的中文語義平台,支持 NLP、轉碼、抽取、全網數據抓取等中文語義分析需求。這個平台是收費的,不過有一些免費配額,足夠我們做一些小的實驗分析。

在使用之前,我們也將前文的幾條熱評測試了一下:

我們來挑幾熱門評論嘗試下:

  1. 大家覺得是假的點贊 0.52
  2. 大家覺的鹿晗與關曉彤不配的請點贊。 0.53
  3. 一定是電視劇的宣傳。一定是。 0.50
  4. 不喜歡關曉彤的贊我 0.62
  5. 哥哥 我們心臟不好 0.02
  6. 同意戀愛,關曉彤就算了吧。 0.48
  7. 如果不是關曉彤。。我覺得我還沒那麼心痛!人生的悲哀就是最喜歡的和最討厭的在一起了 0.35

從這幾個例子來看,文智相對要準確一點,雖然有些評論依然沒有被劃歸到負面,但至少沒有給到很誇張的積極情感值。

由於文智的數量限制,我們對數據中進行了隨機抽樣,用一小部分數據進行分析,並且過濾掉了情感值為 0.5 的部分(其中有不少是純表情回復),得到如下結果:

儘管在手動測試時發現文智的預測會略偏積極,但即便如此,最終的結果依然偏向消極。由此推斷,實際的情感可能比這個分布更加負面。這也就是我們文章開始時給出的結論。

這個結論其實並沒有多大意義(反正我也不粉鹿晗),但通過程序來做情感分析,也許你會用得到。

獲取源碼和詳細文檔,請在公眾號(Crossin的編程教室)中回復 鹿晗

════

其他文章及回答:

用 Python 解讀十九工作報告

Python有嘻哈:Crossin教你用代碼寫出押韻的verse

聽說你好不容易寫了個爬蟲,結果沒抓幾個就被封了?

喏,你們要的 PyCharm 快速上手指南

編程新手:看懂很多示例,卻依然寫不好一個程序

給伸手黨的福利:Python 新手入門引導

如何用100行Python代碼做出魔性聲控遊戲「八分音符醬」

學習編程的過程中可能會走哪些彎路,有哪些經驗可以參考?

你是如何自學 Python 的?

Crossin的編程教室

微信公眾號ID:crossincode

網站:crossincode.com

QQ群:657099683

微信加群:crossin123(新手/進階/爬蟲)


推薦閱讀:

鹿晗的告白——偶像體系的秩序與分裂
如何看待鹿晗成為世界最帥面孔第九名?
《擇天記》這麼火,鹿晗的唇色簡直不要太好看!
看見這麼多人都喊著你的名字,我也就放心了。
對於微博而言,「頭條獨享」或許並不是什麼好事

TAG:Python | 鹿晗 | 中文情感分析 |