bilibili(2)-彈幕語言處理分析

bilibili數(shù)據(jù)分析-彈幕語言分析

前面爬蟲爬取bilibili視頻信息進行數(shù)文章中做了爬蟲的源代碼和思路以及基礎播放數(shù)據(jù)的思路,今天繼續(xù)上次的文章,對彈幕語言進行分析。

1.載入所需要的庫包

#xml包里進行解析的方法
import xml.etree.ElementTree as ET
import pandas as pd
import numpy as np
import jieba
#scipy中處理圖像的函數(shù)
from scipy.misc import imread
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

2.解析彈幕xml文件

定義解析xml的方法,獲取節(jié)點

#解析xml
def parseXml(file):
    text_all = ''''''
    tree = ET.parse(file)
    #獲取節(jié)點
    root = tree.getroot()
    for child in root:
        if child.tag == 'd':
            text_all = text_all + child.text
    return text_all

以B站敖廠長的“貪玩藍月”視頻彈幕作為事例

text_all = parseXml('tanwanlanyue.xml')

3.繪制詞云

載入準備好的背景圖片和字體,為詞云做美化

#設置背景圖片以及字體
back_color = imread('bilibili.png')
font = 'Tensentype-DouDouJ.ttf'

設置wordcloud的參數(shù),背景顏色為白色,最大詞匯量會1000,面板遮罩為載入好的圖片,字體。

# 獲取WordCloud對象
wc = WordCloud(background_color='white',
              max_words=1000,
              mask=back_color,
              font_path = font,
              random_state = 15 )

使用jieba分詞,生成迭代器,載入數(shù)據(jù)為空格字符串。

# jieba分詞,形成有空格的字符串
word_list = []
word_generator = jieba.cut(text_all,cut_all=False)
for word in word_generator:
    word_list.append(word)
text = ' '.join(word_list)

wc.generate(text)

繪制詞云圖片

plt.figure(figsize=(20,10))
plt.axis('off')
plt.imshow(wc)

以背景圖片的主色彩來做字體顏色

#獲取背景圖片的色彩
image_colors = ImageColorGenerator(back_color)
plt.figure(figsize=(20,10))
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis('off')
plt.show()

4.彈幕情感分析

運用準備好的停用詞、情感詞、否定詞等詞典,載入對文本進行處理

#載入停用詞
f=open('stopword.dic')  
stopwords = f.readlines()  
stopwords=[i.replace("\n","") for i in stopwords]  

from collections import defaultdict  

#載入情感詞  
f1 =open("BosonNLP_sentiment_score.txt")  
senList = f1.readlines()  
senDict = defaultdict()  
for s in senList:  
    s=s.replace("\n","")  
    senDict[s.split(' ')[0]] = float(s.split(' ')[1])  

#載入否定詞  
f2=open("notDict.txt")  
notList = f2.readlines()  
notList=[x.replace("\n","") for x in notList if x != '']  

#載入程度副詞  
f3=open("degreeDict.txt")  
degreeList = f3.readlines()  
degreeDict = defaultdict()  
for d in degreeList:  
    degreeDict[d.split(',')[0]] = float(d.split(',')[1])

#將文本數(shù)據(jù)進行分詞,載入列表
def sent2word(sentence):
    seglist = jieba.cut(sentence)
    segResult = []
    for w in seglist:
        segResult.append(w)
    newSent = []
    #如果詞匯是在停用詞中,則過濾掉
    for word in segResult:
        if word in stopwords:
            continue
        else:
            newSent.append(word)
    return newSent

t = []
t.append(sent2word(text_all))

#評分方法
def word_score(word_list):
    id = []
    for i in word_list:
        if i in senDict.keys():
            id.append(1)
        elif i in notList:
            id.append(2)
        elif i in degreeDict.keys():
            id.append(3)
    
    word_nake = []
    for i in word_list:
        if i in senDict.keys():
            word_nake.append(i)
        elif i in notList:
            word_nake.append(i)
        elif i in degreeDict.keys():
            word_nake.append(i)
    
    score = 0
    w = 1
    score0 = 0
    for i in range(len(id)):
        if id[i] == 1:
            score0 = w*senDict[word_nake[i]]
            w = 1
        elif id[i] == 2:
            w = -1
        elif id[i] == 3:
            w = w*degreeDict[word_nake[i]]
        score = score+score0
        score0 = 0
    return score

導出為DataFrame便于處理數(shù)據(jù)。

score_list = []
for i in t[0]:
    score_list.append(class_score(i))
score_df = pd.DataFrame()
score_df['word'] = t[0]
score_df['score'] = score_list
score_df = score_df.drop_duplicates('word',keep='first')

這是負面評分評價,分值越低越消極:



這是正面評分評價(充滿了譏諷-笑),分值越高越積極:


5.bilibili人氣視頻彈幕分析

1.咬人貓-極樂凈土 播放量1336.6W

作為舞蹈區(qū)的播放量大人,視頻播放量一直在B站居高不下,up主咬人貓一直以可愛的形象出現(xiàn)在視頻中,也因此收獲了一大批粉絲。

詞云:



看到了大大的“啊啊啊”,“喜歡”,也代表了彈幕對于這一視頻的主要情感和文字。

情感分析:



整體趨于平滑,情感更偏向于喜歡。


特別在這里解釋一下,“prprprpr”是舔屏的擬聲詞,ssr是陰陽師的鬼神等級,為最高等級。負面情感中“啊啊啊”,“咋辦”,“吐血”,“困住”其實是表達對于這一視頻里的妹子有多吸引人,無法自拔,咋辦,吐血,被視頻困住的意思。

2.面筋哥x波瀾哥-我的烤面筋融化你的心 播放量610.2W

面筋哥可謂是三月份B站最火的人,和波瀾哥,李根,高音哥并稱“追夢四人組”,經(jīng)過鬼畜區(qū)大佬的調(diào)教和制作,將面筋哥和波瀾哥合體為“義結筋瀾”的歌曲

詞云:



其中“Microsoft YaHei”、“SimHei true”、“Yahei true”是高級彈幕的設置文件(大部分內(nèi)容為歌詞),在此沒有做更多的處理,AlanWalk是目前世界DJ電音界的牛人,在此視頻中由此調(diào)侃AlanWalk看中了面筋哥和波瀾哥,以達到娛樂效果。

情感分析:



負極情感詞匯其實很多都沒有太多表達的意思,咳咳更多的其實是表示一種不可言說的意義。


2.敖廠長-變態(tài)做出來的游戲 播放量427.0W

敖廠長是游戲區(qū)一股清流,運用獨有的游戲知識深度和風趣的解說方式,一直位列游戲區(qū)前列,做過很多童年時候玩過或者聽過的游戲,深度揭秘其中的秘密和故事。

詞云:


整個詞云充斥著變態(tài)、臥槽,沙耶之歌是日本一款反式轉(zhuǎn)角游戲,主角因為其視角不同,看到的世界也分為現(xiàn)實和血腥世界。

情感分析:


6.總結

其實可以看出,B站整體彈幕風格還是以積極風趣、玩笑一樂為主,這也其實代表了當下很多年輕人所希望的心理狀態(tài),在現(xiàn)實世界認真的活著,在虛擬的一面又很風趣的傳達快樂。

B站的彈幕已經(jīng)逐漸發(fā)展,超越“論壇”這一緩慢形式的正式交談,形成了高速流式的非正式隨機娛樂。因為接受度和內(nèi)容理解度的降低,B站的受眾群體往往是較為年輕的一代,但其實很多?;蛘邚椖恢械亩巫铀枰睦斫饬?,也逐漸的提升。這會為年輕一代對于新鮮事物的接受度,自我認知,善惡識別等,形成重要的渠徑。這也是需要B站對于彈幕文化的把控和引導。


ps.因為后兩個的分詞數(shù)據(jù)沒有做壓縮,出現(xiàn)了大量的“6666666666”的詞匯,導致整體函數(shù)圖像上揚。后期會加上更改,運用正則進行壓縮。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容