/BiliBiliCommentsAnalysis

对b站弹幕、评论进行爬虫,然后使用Word2Vec模型将其转化为词向量进行分析

Primary LanguagePythonApache License 2.0Apache-2.0

BiliBiliCommentsAnalysis

对b站弹幕、评论进行爬虫,然后使用Word2Vec模型将其转化为词向量进行分析

弹幕、评论获取

DataCollection.py中定义了爬取视频aid、cid以及弹幕、评论的函数,首先需要使用bv号获取该视频的aid和cid,然后使用cid获取弹幕,使用aid获取评论,其中,获取弹幕的b站官方接口为https://comment.bilibili.com/{cid}.xml,{cid}部分需要自己填充;获取评论的接口为https://api.bilibili.com/x/v2/reply?pn={page}&type=1&oid={aid}&sort=2其中{page},{aid}部分需要自己填充。

最后将获取的数据保存为csv,其中评论数据包含用户名、性别、等级、时间戳、评论

文件名命名方式为aid+comments+时间戳

  • demo
video_bv = 'BV1p7411Y7BC'
aid, cid = get_video_id(video_bv)
get_video_danmaku(cid)
get_video_comments(aid, 1, 2000)

数据预处理

DataProcess.py中定义了text_process函数,对数据进行了去除标点符号、去除表情、去除数字、去除空格等操作,然后定义了词典.txt其中整理了一部分b站常用的分词,避免后续使用jieba分词时出现分词错误,但由于个人精力有限,不可避免地仍然有众多分词错误。最后,使用百度停用词表去除了停用词。 对b站弹幕、评论进行分词的难点一方面在于很多用词不包含在传统的词典中,因此可能产生较多分词错误;另一方面在于评论中存在大量颜文字、特殊符号,难以一一去除

  • demo
danmaku = pd.read_csv('84887919comments1650424641.8339486.csv', encoding='gb18030').iloc[:, 5]
danmaku = danmaku.apply(text_process)
for i in danmaku:
	print(i)

Word2Vec

main.py中,构建了Word2Vec模型,将分词后的结果转化为词向量。

如老番茄的词向量为:

array([-1.2107437 , -0.1033226 ,  1.9818361 ,  0.03519016, -0.01217345,
        0.98833764,  2.7666173 ,  1.8579122 ,  1.6884342 ,  2.5897765 ,
       -0.59002656,  0.9397052 , -1.8468462 ,  1.7303164 ,  0.66788757,
        0.7514749 ,  2.6071994 ,  0.6477106 , -1.8720193 , -1.7558274 ,
        0.3031359 ,  2.4166708 , -0.07250266, -2.1228633 ,  0.49369943,
       -0.2299376 , -1.1851884 ,  0.74878716,  1.0711353 , -1.2740091 ],
      dtype=float32)

与老番茄最相关的20个词为:

[('温柔', 0.7429916858673096),
 ('复旦之光', 0.7391597032546997),
 ('变声', 0.7284794449806213),
 ('王子', 0.7165787220001221),
 ('钢琴', 0.6986279487609863),
 ('线', 0.6952051520347595),
 ('腹肌', 0.6900023221969604),
 ('成熟', 0.689068615436554),
 ('稳重', 0.6844357848167419),
 ('拥有者', 0.6791863441467285),
 ('某幻', 0.6744824051856995),
 ('rapper', 0.6687389016151428),
 ('全能', 0.6663230657577515),
 ('出场', 0.6536276340484619),
 ('黑衣服', 0.6523473262786865),
 ('才华横溢', 0.6518454551696777),
 ('**boy', 0.64589524269104),
 ('键盘', 0.6455495953559875),
 ('编曲', 0.6446139216423035),
 ('却', 0.643751323223114)]

对词向量进行降维,并可视化其中部分词语后的效果图如下:

fig1

PS:可视化部分参考了B站up主 五连单排一班 的教学视频,她的b站主页为:https://space.bilibili.com/81480422/?spm_id_from=333.999.0.0

但是,从图中可以看到,其实部分相关的词语并没有距离特别近,因此还有待进一步优化,主要问题可能是前面的分词中还有大量的无效词等等