馮 淼
(國家廣播電視總局信息中心,北京 100866)
彈幕最早源于日本視頻分享網站NicoNico 動畫的即時留言字幕功能,因大量的評論和留言在視頻中飄過時的效果看上去像是密集的炮彈,便被NICO 網友稱為“彈幕”。2008 年,國內視頻網站AcFun 借鑒NicoNico 動畫,建立了及時評論系統,成為國內第一家彈幕視頻網站。2009年,AcFun資深用戶徐逸成立了視頻網站Bilibili 的前身MikuFans,保留了彈幕功能,從此彈幕在國內開始逐漸興起?,F如今,彈幕已經成為視頻內容的重要組成部分,作為增強用戶與視頻間互動以及提升網站使用黏性的重要手段,普遍被國內在線視頻網站使用。與傳統形式的評論相比較,彈幕形式的評論增強了觀眾之間在觀看視頻時的互動,且由于彈幕操作簡單、傳播迅速、互動性強和受眾廣等優點,越來越多的用戶在觀看視頻時樂于通過彈幕表達自己的觀點[1],這些彈幕評論中蘊藏著用戶對于視頻劇情、場景、演員等的看法和態度,不僅可以反映出用戶在觀看視頻時的情感,還能體現出視頻的主旨大意,值得進行深入的挖掘和分析。
本文利用Python 開發軟件對愛奇藝上線的電視劇的彈幕進行收集和分析,從大量的電視劇彈幕數據中獲取用戶在觀看電視劇時的及時性情感傾向和關注點,了解用戶對電視劇的觀看意向和評價情況,分析電視劇的播出效果,為電視劇的制作和營銷提供參考。
本文構建平臺設計思路:第一步,分析獲取愛奇藝上線的電視劇彈幕地址及電視劇相關信息,利用Python編寫代碼進行電視劇彈幕文本數據采集、數據清洗和數據存儲。第二步,使用Python第三方庫Jieba對彈幕內容數據進行中文分詞、去掉停用詞、統計高頻詞,得到電視劇彈幕高頻關鍵詞及權重。第三步,調用Python 第三方庫WordCloud 對經過Jieba 分詞處理的彈幕數據進行詞云圖繪制。第四步,運用SnowNLP對彈幕數據進行情感分析,計算出彈幕語義積極的概率,繪制出彈幕情感分析直方圖和密度曲線圖,同時,再次通過彈幕數據,利用Python編寫代碼分析出電視劇每集的彈幕數量和主要演員及飾演角色被提及次數,并繪制生成相關統計圖形進行可視化展示。最后,通過Python編寫代碼生成2020年愛奇藝上線電視劇的集中展示頁面,并調用String 模塊中的Template 方法實時生成每一部電視劇彈幕數據分析詳細結果頁面,實現彈幕數據的可視化展示,最后使用Nginx WEB 服務器將頁面發布出去。平臺設計思路如圖1所示。
利用Chrome 瀏覽器訪問愛奇藝的電視劇庫頁面,并使用瀏覽器自帶的開發者工具分析網站響應包,獲取頁面數據來源請求地址,進行網頁元素分析。目前,愛奇藝電視劇劇目信息數據使用JSON 數據格式進行前后端交互,電視劇彈幕數據以.z格式的二進制數據包存儲,均可直接通過訪問特定的URL 地址獲取。
首先,通過Python 的Requests 第三方庫,配置Headers 等相關參數,模擬瀏覽器訪問愛奇藝2020 年上線電視劇信息URL 地址,解析獲取電視劇的ID 值以及集數等相關數據。其次,同樣通過使用Requests第三方庫,結合電視劇的ID值,模擬瀏覽器訪問單個電視劇每集信息查詢URL地址,解析獲取電視劇每集的ID值和每集時長。再次,通過模擬訪問彈幕獲取地址URL獲取存有彈幕數據的.z格式的二進制數據包,這里,由于愛奇藝彈幕為每5分鐘加載,需要將每集時長轉化為秒進行計量,再除以300向上取整并結合利用每集的ID 值組成具體的URL。最后對獲取的.z 文件進行解壓,獲取.xml 格式的彈幕數據文件,并對文件內容進行解析,獲取彈幕內容數據。為方便可視化展示時對數據的靈活調用,本過程獲取的所有數據均存儲在MySQL數據庫中。
彈幕數據中包含了一些無意義的標點符號、表情符號、空白值以及數字等無效信息,通過數據清洗,將這些無效信息剔除,僅提取彈幕中的中文內容,從而提高數據質量。
由于中文文本之間每個漢字都是連續書寫的,需要通過特定的手段來獲得其中的每個詞組,這種手段叫作分詞。Jieba是優秀的中文分詞第三方庫,它基于前綴的詞典可以實現高效的詞圖掃描,并生成句子中漢字的所有可能成詞情況而構成的有向無環圖,其采用動態規劃法查找最大概率路徑,并找出基于詞頻的最大切分組合,對于未登錄詞,采用漢字成詞的隱馬爾可夫模型(Hidden Markov Model, HMM) 進行組詞,并使用維特比算法。Jieba庫的主要功能包括分詞、添加自定義詞典、關鍵詞提取和詞性標注,支持三種分詞模式:精準模式、全模式和搜索引擎模式[2]。其中,精確模式可以將句子以最精確的方式切分,常被用于情感分析。全模式則是將句子中的詞全部分解,盡可能分出全部的詞。搜索引擎模式則是將部分還能再分的詞切分,得到比精確模式更多的詞[3]。本文選擇使用Jieba精確模式是對電視劇彈幕數據進行分詞。
首先,使用Pymysql 庫連接MySQL 數據庫讀取彈幕內容。然后,通過Jieba 庫的lcut()方法對彈幕內容進行分詞。由于彈幕內容中會存在一些停用詞,分詞后的結果還不能直接用于彈幕詞云圖的繪制,需要把這些停用詞去掉,防止在詞云圖中出現,本文使用的是百度停用詞表。最終使用Collections 模塊counter()方法進行詞頻統計。
詞云圖是對文本中出現頻率較高的“關鍵詞”予以視覺化的展現,目前詞云圖已成為文本數據可視化的一種常用方式。在詞云圖中,通常是不同的詞采用不同的顏色表示,不同詞頻或權重的詞采用不同的字號表示[4]。本文利用第三方WordCloud 庫進行詞云圖繪制。由于電視劇彈幕數據較多,首先需要過濾掉其中的低頻詞,本文僅選取詞頻在前40%的詞作為高頻詞用于繪制詞云圖,并對詞云的背景顏色、字體最大值、字體最小值、詞云圖片尺寸進行了設置,方便在彈幕數據分析詳細結果頁面進行展示。
情感分析是指對帶有感情色彩的主觀性文本進行分析挖掘、處理、歸納和推理的過程[5],這一過程可以分析出人們在評論事物、服務、組織、事件和話題時的看法、情感傾向、態度等。目前常見的情感極性分析方法主要是兩種:基于情感詞典的方法和基于機器學習的方法。本文通過使用基于中文文本分析和處理的Python 第三方庫SnowNLP 對彈幕文本數據進行情感分析研究,它提供了一系列的自然語言處理功能,包括分詞、詞性標注、情感分析、文本分類等。它采用了機器學習和統計學習算法,并且支持自定義訓練模型,以便更好地適應特定領域的文本處理任務。
電視劇彈幕情感分析過程如下:首先,讀取電視劇彈幕文本數據,再對這些數據進行去重、特殊字符過濾、提取中文內容。然后,調用SnowNLP 模塊的sentiment 方法,對文本進行情感評分,得到的情感分值在0 到1 之間,越接近0 情感表現越消極,越接近1情感表現越積極。最后,使用Matplotlib 繪制彈幕情感分值分布的直方圖和密度曲線圖。
本文選取2020 年在愛奇藝上線的181 部電視劇,獲取了這些電視劇的基礎信息數據和35 252 554條彈幕數據,生成了電視劇彈幕詞云圖、情感分值分布的直方圖和密度曲線圖、電視劇每集的彈幕數量和主要演員及飾演角色被提及次數統計圖形,并利用上述圖形和數據構建了一個可視化的電視劇彈幕分析平臺。平臺部署在8 核CPU,32GB 內存,500GB SSD 磁盤,100Mbps 帶寬的服務器上,操作系統使用64位的CentOS7.6,配置了Python3.8.5和MySQL5.7.29的基礎環境,并安裝了requests2.27.1、beautifulsoup4.9.1、pandas1.4.2、matplotlib3.3.4、wordcloud1.8.2.2、pymysql0.10.1、snownlp0.12.3、jieba0.42.1 及其他相關第三庫,選用Nginx1.21 作為Web 服務器發布電視劇彈幕分析平臺。
平臺首頁直接展示出2020 年愛奇藝播出的所有電視劇的劇目名稱和海報,如圖2所示。

圖2 電視劇彈幕分析平臺首頁
如果想要查看電視劇彈幕的詳細分析結果,直接點擊電視劇的劇目名稱或海報,進入詳情頁。詳情頁展示了電視劇的劇名、播出時間、集數、主要演員、彈幕詞云、主要角色彈幕提及次數、彈幕整體情感傾向等數據和圖片,通過點擊集數還會展示出各集彈幕數量圖,如圖3、圖4所示。

圖3 電視劇詳情頁

圖4 各集彈幕數量
彈幕已經成為觀眾在視頻平臺上觀看電視劇一種新的參與互動形式,它簡單直接地反映出觀眾對于電視劇劇情、人物角色和場景的第一感受,本文通過對電視劇彈幕數據的文本挖掘和情感分析獲得觀眾對于電視劇的整體感受、評價情況、關注點以及電視劇的播出效果。通過彈幕數據采集、數據清洗、彈幕高頻詞統計、詞云圖繪制和SnowNLP 情感分析等步驟后,獲得電視劇的彈幕詞云圖、彈幕整體情感傾向圖、主要角色彈幕提及次數圖、各集彈幕數量圖等結果,并統一通過電視劇彈幕分析平臺進行可視化展示,更為直觀地呈現出觀眾通過彈幕表達的對于觀看電視劇時的情感,對電視劇的制作和營銷具有重要的參考價值。
在后續的研究中,需要進一步加強彈幕出現時間與電視劇劇情內容,彈幕內容與電視劇主要角色演員之間的關聯關系研究。