楊冰倩
(河北軟件職業(yè)技術(shù)學(xué)院,河北 保定 071000)
中國電影市場規(guī)模不斷擴(kuò)大,成為全球第二大電影市場。2019年,中國電影市場總票房達(dá)到642.66億元人民幣,創(chuàng)歷史新高。中國觀眾對電影的需求不斷增加,推動了市場的快速增長。隨著互聯(lián)網(wǎng)的普及,越來越多的影評平臺涌現(xiàn)出來,如豆瓣、時光網(wǎng)、貓眼等[1]。這些平臺提供了觀眾發(fā)表影評、評分、討論電影的空間,使得觀眾可以方便地獲取他人對電影的評價和推薦。中國觀眾對影評的關(guān)注度逐漸增加,影評在電影消費(fèi)決策中起到了重要的作用[2]。觀眾通過影評來獲取信息、指導(dǎo)觀影選擇,并通過社交媒體進(jìn)行討論和分享。因此,影評在中國電影市場中具有一定的影響力[3]。
本文基于Python語言,對貓眼電影中的評論信息進(jìn)行爬取,然后通過數(shù)據(jù)分析技術(shù)對爬取到的數(shù)據(jù)進(jìn)行分析與展示。通過PyQt技術(shù)設(shè)計(jì)了與用戶的交互界面,增強(qiáng)了與用戶的互動性。
本系統(tǒng)的業(yè)務(wù)流程如圖1所示,用戶先選擇電影,如果該電影分析過則顯示查看按鈕,可以查看分析的結(jié)果;如果沒有分析過,用戶可以點(diǎn)擊分析按鈕,對選擇的電影進(jìn)行分析,分析完成后可以查看結(jié)果。本系統(tǒng)的用戶交互界面使用PyQt完成,主要包括主窗口及顯示分析結(jié)果的子窗口,功能設(shè)計(jì)主要通過request模塊獲取數(shù)據(jù),再使用pandas模塊把數(shù)據(jù)生成文件,最后使用Pyecharts模塊生成圖表。
圖1 業(yè)務(wù)流程
本系統(tǒng)使用request庫爬取豆瓣電影網(wǎng)中的數(shù)據(jù),主要包括電影的data(日期)、score(評分)、city(城市)、comment(評論)、nick(用戶昵稱)等字段,本文以近期熱映電影“消失的她”為例。在獲取數(shù)據(jù)時,先應(yīng)用pandas模塊中的DataFrame()方法創(chuàng)建一個數(shù)據(jù)框用于臨時保存讀取的數(shù)據(jù)。在貓眼電影網(wǎng)中每部電影都有唯一的moveId,因此可以通過傳遞不同的moveId爬取不同電影的評論。通過request.get()方法對評論鏈接發(fā)起請求,然后通過pandas模塊將解析到的數(shù)據(jù)保存到Excel文件中。爬取到的部分原始數(shù)據(jù)如圖2所示。
圖2 部分原始數(shù)據(jù)集展示
爬蟲部分代碼展示如下:
re=requests.get(url='https://movie.douban.com/subject/%s/comments?start=%d&limit=20&sort
=new_score&status=P' % (self.movie_id, 20 * i),headers=headers).text
html=etree.HTML(re)
comment=html.xpath('//div[@class="comment"]')
for content in comment:
grades=content.xpath('.//span[contains(@class,"rating")]')
texts=content.xpath('.//span[@class="short"]')
if len(grades) >0:
grade=grades[0].xpath('./@class')[0][7:8]+' '
else:
grade= ' '
電影上映后,評分的高低在一定程度上體現(xiàn)了電影的質(zhì)量與觀眾緣,本文以電影“消失的她”為例闡述該模塊的技術(shù)實(shí)現(xiàn)。首先使用pandas模塊讀取數(shù)據(jù),然后使用Pyecharts模塊生成折線柱狀圖,最后調(diào)用render()方法生成HTML文件。其主要評論城市數(shù)及平均分如圖3所示,左邊的縱坐標(biāo)表示評論的城市數(shù)量,右邊的縱坐標(biāo)表示該城市對電影評論的平均分。
圖3 電影“消失的她”主要評論城市數(shù)及平均分
通過圖3可以發(fā)現(xiàn),來自上海、廣州、成都的評論數(shù)量比較高,并且排在前幾名的基本都是一線城市,一定程度上反映了電影在一線城市的播放量會比二、三線城市高,主要原因跟一線城市的人口規(guī)模、經(jīng)濟(jì)實(shí)力、影院數(shù)量和設(shè)施以及影評的發(fā)行策略有關(guān)系[4-5]。
部分代碼展示如下:
city_main=city_com.sort_values('count', ascending=False)[0:30]
attr=city_main['city']
v1=city_main['count']
v2=city_main['mean']
line=Line("主要城市評分")
line.add("城市", attr, v2, is_stack=True, xaxis_rotate=45, yaxis_min=0,
mark_point=['min', 'max'], xaxis_interval=0, line_color='lightblue',
line_width=4, mark_point_textcolor='black', mark_point_color='yellow',
is_splitline_show=False) # 添加折線圖
bar=Bar("主要城市評論數(shù)") # 柱形圖對象
bar.add("城市", attr, v1, is_stack=False, xaxis_rotate=45, yaxis_min=0,
xaxis_interval=0, is_splitline_show=False,mark_point_color='yellow') # 添加柱形圖
overlap=Overlap() # 疊加圖表對象
詞云是一種可視化工具,通過將文本中出現(xiàn)頻率較高的詞語以較大的字體顯示,從而給人一種直觀的展示[6]。在影迷的情感分析中,詞云可以用來展示影迷對電影的主要評價和感受[7]。本系統(tǒng)中對評論內(nèi)容使用jieba模塊進(jìn)行分詞,jieba庫分詞支持3種模式:精確模式、全模式和搜索引擎模式[7],本系統(tǒng)采用搜索引擎模式將評論內(nèi)容切割成若干個詞,然后使用WordCloud模塊將其生成詞云。如圖4所示為電影“消失的她”評論生成的詞云。
圖4 電影“消失的她”詞云
部分代碼展示如下:
words=jieba.lcut(t)
filtered_words=[]
for word in words:
if len(word) >2: # 只保留長度大于2的詞語
filtered_words.append(word)
filtered_text=' '.join(filtered_words)
w=WordCloud(
font_path="C:/Windows/Fonts/SIMSUN.TTC", # 詞云字體
width=1000, # 圖片寬度
height=800, # 圖片高度
background_color="white") # 圖片背景顏色
w.generate(filtered_text)
w.to_file(self.ciyun)
“消失的她”是一部懸疑電影,上映后引起了眾多影迷的共情。通過詞云可以看出,大部分觀眾認(rèn)為該電影好看,評價較高。
本系統(tǒng)實(shí)現(xiàn)了對影評的情感分析及可視化,以電影“消失的她”為例展示了該系統(tǒng)主要實(shí)現(xiàn)的功能,通過詞云展示了影迷的情感傾向,通過柱狀圖與折線圖展示了評論城市與評分之間的關(guān)系。通過這些數(shù)據(jù)的提取,全面挖掘了影評背后的關(guān)鍵信息,為電影行業(yè)研究觀眾的喜好和電影行業(yè)的發(fā)展提供了參考。