邵小青,賈鈺峰,章蓬偉,丁 娟
(新疆科技學院信息科學與工程學院 新疆 庫爾勒 841000)
近年來,自然語言處理技術得到了以計算機科學為代表的自然科學領域到社會科學領域的廣泛關注,并且在新聞傳播、輿論管理、觀點分析等問題中展示了不容忽視的價值[1]。隨著互聯(lián)網(wǎng)的發(fā)展和大數(shù)據(jù)時代的到來,網(wǎng)絡上的數(shù)據(jù)分析僅僅靠人工篩選挖掘出有價值的信息是實現(xiàn)不了的,如何快速高效地從不規(guī)則、海量的文本中挖掘出有意義的信息并分析情感傾向性是自然語言處理(natural language processing,NLP)領域研究的熱點。NLP是人工智能領域的一個分支,主要是運用自然語言處理和理解人類的語言,應用包括機器翻譯、信息提取、文本分類、語音轉(zhuǎn)換等。本文通過Python語言編寫爬蟲程序自動獲取數(shù)據(jù),篩選有價值的信息,對數(shù)據(jù)進行挖掘來解決業(yè)務問題。對豆瓣影評數(shù)據(jù)進行清洗與篩選,采用Python的類庫SnowNLP進行影評數(shù)據(jù)的情感分析,將有價值的數(shù)據(jù)通過可視化技術展示出來,可以幫助用戶更高效便捷地獲取到有價值的信息,同時為媒體、電影市場、社交網(wǎng)站提供口碑及相關服務的幫助。
登錄豆瓣電影《你好,李煥英》頁面,Python爬取解析網(wǎng)頁源碼,由于豆瓣電影短評總數(shù)只能顯示500條評論,爬取到數(shù)據(jù)500條。首先確定數(shù)據(jù)所在的url,《你好,李煥英》豆瓣影評的URL是https://movie.douban.com/subject/34841067/comments?start=20&limit=20,34841067為電影ID,start=20影評開始的頁面,limit=20是每頁評論數(shù)。使用requests庫發(fā)送網(wǎng)絡請求,url='https://movie.douban.com/subject/34841067/comments?status=P',headers={"User-Agent":Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42},查看文本內(nèi)容:response=requests.get(url=url,headers=headers)。使用xpath解析影評數(shù)據(jù),html_data=response.text,selector=parsel.Selector(html_data),comments_list=selector.xpath("http://span[@class='short']/text()").getall()。每條數(shù)據(jù)內(nèi)容有10個維度,數(shù)據(jù)保存結(jié)果見圖1。
圖1 影評數(shù)據(jù)
爬取到的電商評論數(shù)據(jù)集存在很多無意義或重復的數(shù)據(jù),如果不進行數(shù)據(jù)清洗預處理,把這些數(shù)據(jù)進行分詞、詞頻統(tǒng)計及情感分析等,會增加很大工作量,甚至影響實驗結(jié)果的準確性[2]。
去除重復、不完整、語義不清的數(shù)據(jù),獲取有效評論485條。借助jieba分詞對清洗后的每條評論進行中文分詞,以哈爾濱工業(yè)大學停用詞詞典為基礎對停用詞進行過濾,最后生成標準化的文本。
基于Matplotlib庫實現(xiàn)影評結(jié)果可視化,以《你好,李煥英》為例,影評餅狀圖見圖2,影評評分餅圖可相對直觀展示出影評星級比例;詞云圖見圖3,影評關鍵詞展示圖可展示出觀眾對《你好,李煥英》的熱點話題。其中,五星占41以上,一星占11%,影評情感反饋這是一部催淚感人的電影,僅有一小部分人認為是爛片。從圖2、圖3可以初步判斷大多數(shù)觀眾對《你好,李煥英》這部電影持有喜愛和推薦的態(tài)度,值得觀賞。
圖2 影評評分餅圖
圖3 影評關鍵詞展示圖
影評描述性可視化僅能在一定程度上展現(xiàn)觀眾對電影的情感傾向和關注話題,不能挖掘出評論蘊藏的深層次情感。本文通過SnowNLP進行影評的情感分析?,F(xiàn)在自然語言處理庫基于英文的居多,而SnowNLP庫是Python中用于專門處理中文文本的類庫,功能豐富,能實現(xiàn)中文分詞、詞性標注、情感分析、提取文本關鍵詞、提取文本摘要及計算文本相似度等[3]。它受到TextBlob的啟發(fā)而寫的,沒用NLTK,所有算法都是自己實現(xiàn)的,有自己訓練好的字典,采用unicode編碼。通過閱讀SnowNLP源碼,情感判斷過程是首先讀取分類好的文本內(nèi)容,對文本進行分詞,去除停用詞;計算每個詞出現(xiàn)的頻數(shù),計算文本的先驗概率和后驗概率,選擇概率較大的類別。本次數(shù)據(jù)分析操作步驟是首先按行讀取評論文本,循環(huán)遍歷通過sentiments方法,計算得到情感分數(shù),生成情感分數(shù)柱形圖以及波動曲線圖。核心代碼如下:
line = source.readlines( )
sentimentslist = [ ]
for i in line:
s = SnowNLP(i)
sentimentslist.append(s.sentiments)
plt.hist(sentimentslist, bins = np.arange(0, 1, 0.01), facecolor = 'g')
plt.xlabel('Sentiments Probability')
plt.ylabel('Quantity')
plt.title('Analysis of Sentiments')
plt.show()
將sentiment情感分析縱坐標區(qū)間從[0,1.0]變?yōu)閇-0.5,0.5],其中0以上表示積極情感,負數(shù)表示消極情感。如圖4、圖5所示,通過情感分布圖說明電影持喜愛和推薦的態(tài)度觀眾占絕大多數(shù),積極情感相對集中,電影值得一看。
圖4 情感分數(shù)柱形圖
圖5 情感分數(shù)波動曲線圖
大數(shù)據(jù)時代,人人是信息的締造者也是使用者,越來越多的企業(yè)都嘗試從數(shù)據(jù)中挖掘有價值的信息,來解決業(yè)務的問題。本文采用Python爬取數(shù)據(jù),基于SnowNLP對影評數(shù)據(jù)進行情感分析,從而幫助用戶更高效便捷地獲取到有價值的信息,同時為媒體、電影市場、社交網(wǎng)站等提供口碑及相關服務的幫助,有一定的研究價值。本文對影評數(shù)據(jù)情感傾向性進行挖掘分析,由于SnowNLP庫是基于商品評論訓練好的模型,本次使用中沒有重新訓練數(shù)據(jù),因此數(shù)據(jù)分析的準確率有待提高。下一步優(yōu)化算法,訓練好數(shù)據(jù),提高數(shù)據(jù)分析的準確率。