「RNG vs SKT」彈幕的自然語言的初步分析,這就是Python的魅力
前排 @皇族電子競技俱樂部
S7中RNG對陣SKT,想必是全世界LOL玩家關注的重點。在比賽開始前,使用小葫蘆把鬥魚S7直播間的彈幕都抓下來,想著做一小點分析,看看會得出什麼結論。
因為數據量和分析深度等原因,以下內容僅供娛樂觀賞
數據採集
使用小葫蘆採集2萬多條彈幕數據,RNG對陣SKT鬥魚直播間的彈幕,最後得到約4萬可用數據
中文分詞
使用jieba分詞,演算法如下
- 基於前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
- 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
- 對於未登錄詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 演算法
簡單處理之後,看起來是這樣
順便做個統計,看看都在說什麼。不加停用詞是這樣的,全是 「666」
RNG和牛逼是出現最多的詞語,同時也發現「盧本偉牛逼」
弱弱問一句「唐夢瓊」是誰
下面是詞雲,Python的詞雲做不來不好看,所以我使用的工具 HTML5 Word Cloud
彈幕內容詞雲
用戶昵稱詞雲
情感分析
這裡使用的是 isnowfy/snownlp。SnowNLP是一個python寫的類庫,可以方便的處理中文文本內容,是受到了TextBlob的啟發而寫的。
- from snownlp import SnowNLP
- s = SnowNLP(u"這個東西真心很贊")
- s.sentiments # 0.9769663402895832 positive的概率
有點難看,直接看數據吧,得到的結果是在 [0,1] 之間的positive的概率
51659中有44705個大於0.5,佔比86.54%,有 6954條彈幕低於0.5,佔比13.46%。
彈幕中積極的概率還是相當高的,說明觀眾還是比較讚賞比賽的。
特徵提取
TF-IDF是信息檢索領域非常重要的搜索詞重要性度量;tf-idf是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。
詞頻TF(Term Frequency)
詞w在文檔d中出現次數count(w, d)和文檔d中總詞數size(d)的比值:
基於 TF-IDF 演算法的關鍵詞抽取:
- RNG
- rng
- 賀電
- 加油
- 發來
- 666
- 6666
- 66666
- 恭喜
- 66666666666666
- 666666
- 66666666666
- 6666666
- skt
- 李哥
- 66666666666666666666
- SKT
- 66666666
- 666666666
- 馬甲
在沒有加上停用詞的前提下,可以看到效果並不理想
TextRank是在Google的PageRank演算法啟發下,針對文本里的句子設計的權重演算法,目標是自動摘要。它利用投票的原理,讓每一個單詞給它的鄰居(術語稱窗口)投贊成票,票的權重取決於自己的票數。
基於 TextRank 演算法的關鍵詞抽取:
- 發來
- 賀電
- 加油
- 學院
- 機器人
- 大學
- 職業
- 船長
- 技術
- 小炮
- 沒有
- 解說
- 中國
- 經濟
- 開始
- 無敵
- 香鍋
- 垃圾
- 老鼠
- 科技
特徵選擇
Word2vec是一個將單詞表徵成向量的形式,它可以把文本內容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文本語義上的相似度。
計算相似度:
首先是RNG:
- rng 0.9893965721130371
- 加油 0.9829007983207703
- 必勝 0.9790929555892944
- Rng 0.9743078947067261
- 恭喜 0.9733642339706421
- 中國隊 0.9397183656692505
- 關 0.9283092021942139
- < 0.9278833866119385
- 燕尾港 0.9222617149353027
- B 0.9143030643463135
RNG加油
看看SKT:
- skt 0.9911665320396423
- 皇族 0.972029983997345
- ^ 0.970970094203949
- 穩住 0.9653508067131042
- 乾死 0.9643667340278625
- 牛比 0.9629441499710083
- 一起 0.9625348448753357
- @ 0.9619969725608826
- 鳥巢 0.9608791470527649
- 冠軍 0.9608250856399536
穩住,乾死SKT?
賀電:
- 學院 0.9811943769454956
- 大學 0.980491042137146
- 技術 0.9766334295272827
- 職業 0.9691535234451294
- 電子科技 0.9668481349945068
- 發來 0.9619022607803345
- 科技 0.9594647884368896
- 山東 0.9568137526512146
- 重慶 0.9440888166427612
- 哈爾濱 0.939836859703064
山東XX學院發來賀電
加油:
- 必勝 0.9876022934913635
- RNG 0.9829007983207703
- rng 0.960281252861023
- Rng 0.9591789841651917
- 恭喜 0.9551880359649658
- 中國隊 0.9436988830566406
- 關 0.94183349609375
- ! 0.921385645866394
- ~ 0.9148629903793335
- @ 0.9062787294387817
RNG加油,RNG必勝
小狗:
- 吹 0.9970275163650513
- 無敵 0.996719241142273
- 神超 0.996111273765564
- 後期 0.9959050416946411
- 厲害 0.9957337975502014
- 凶 0.9957261681556702
- 強 0.9955072402954102
- 一個 0.9954395890235901
- 干 0.99541175365448
- 起來 0.9952359199523926
狗吹?
李哥:
- 還是 0.9825356602668762
- 電話 0.9700809717178345
- 承 0.9697628617286682
- 心臟 0.9686012864112854
- 陳文澤在 0.9681863188743591
- 麻痹 0.9680625200271606
- 響 0.9674116373062134
- 以為 0.9664229154586792
- 狗哥 0.9592204689979553
- 不 0.9589840769767761
你李哥還是你李哥
MLXG:
- 宣告 0.9958090782165527
- mlxg 0.9953181147575378
- 死亡 0.995277464389801
- b 0.9949076771736145
- 6666 0.9947425723075867
- 丑 0.9943945407867432
- 10 0.9943088293075562
- 辣雞 0.9940722584724426
- 乾死 0.9940391778945923
- 錘 0.9939616918563843
香鍋和死亡宣告有啥關係
小虎:
- 笑笑 0.9971799850463867
- 看到 0.9967395663261414
- 解說 0.9961692690849304
- 不是 0.9959656000137329
- 中單 0.9951503872871399
- 假 0.9950063824653625
- 為什麼 0.9944812655448914
- 又 0.9942663908004761
- 么 0.9938984513282776
- 里奧 0.9937981367111206
小虎與加里奧(:
letme:
- 難受 0.9964221715927124
- 笑話 0.9959778785705566
- 哦 0.9958946108818054
- 世界 0.9958213567733765
- 毒奶 0.9957934021949768
- KPL 0.9957884550094604
- 上單 0.9956253170967102
- 瓜皮 0.9955945014953613
- 快 0.9953423738479614
- 打團 0.9953156113624573
真難受啊
To Do
- 可以使用樸素貝葉斯做分類模型
- 使用機器學習性能評估指標預測精確率和準確率
- 歡迎補充
今天的文章分享到此結束,希望本次分享對正在學習Python的你有所幫助。
我做開發幾年的時間,如果大家對於學習Python的學習方法,學習路線以及你不知道的疑問,都可以隨時來問我,大家可以加我的學習蜜圈,圈內有開發工具和教程。
關注我的頭條號,然後私信給我「Python」會自動回復你相關資源地址。

