写在前面
首先,作者受到 《我分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么》 这篇文章的影响,加上自己也是一个音乐爱好者,所以决定做一个网易云热门歌手歌词信息检索与信息抽取系统。
通过爬取 网易云音乐 60位热门歌手,每位歌手50首左右的热门歌词。根据输入的关键字,检索出相关性最高的10首歌,并能够从歌曲中抽取出歌名、演唱、作词、作曲、季节、情绪、个性化标签等结构化信息。
实现思路(非技术人员可以跳过此小节)
流程图(1) 爬取歌词信息,生成文档数据集;
(2) 对所有文档进行分词处理;
(3) 构造“词-文档流”倒排索引;
(4) 利用向量空间模型技术,检索出相关度排名前十的歌曲;
(5) 分析歌词数据,从歌词中抽取出有效的结构化信息;
(6) 搭建B/S系统,进行结果展示。
实现环境(非技术人员可以跳过此小节)
(1)操作系统:Windows10 x64
(2)后端:Anaconda3(64-bit),Python3.6,Flask框架
(3)前端:HTML,CSS,JavaScript,JQuery,BootStrasp,Chrome
好了,进入正题,预备,开始……
我把目标锁定在网易云音乐热门的华语男歌手、华语女歌手以及华语组合/乐队,每一类爬取20个热门歌手,这样我就有了60位歌手的信息。 网易云歌手 爬取的歌手个人信息 有了歌手信息,我就可以爬取歌手的歌曲了,每个歌手大概都可以爬取50首左右,因此最终我获得了2837首歌曲。 爬取歌词过程 结果1结果2
我们以周杰伦的歌曲为例,看一下爬取的结果。
周杰伦歌曲 告白气球
有了这些数据,按照实现思路,就可以搭建信息检索与信息抽取系统了。(非技术人员可以跳过此小节)
(1)使用“jieba”中文分词库对歌词数据进行分词处理;
(2)计算每首歌词中每个词的TF-IDF值,构建字典集;
(3)在用户输入后,构建查询向量,利用向量空间模型,计算查询向量和文档向量的相似度,取排序前十名的歌曲;
(4)进行结构化信息抽取,抽取出歌曲的歌名、演唱、作曲、作词、季节、情绪,个性化标签;
(5)搭建B/S展示系统,在web端接收用户输入,并将检索和抽取结果在web端显示,使用Flask进行前端和Python后端数据交互。
网易云热门歌手歌词信息检索与信息抽取系统
展示系统做的有些简单,欢迎各位吐槽。首先,进入主界面:
主界面我们在检索框中输入想要检索的内容。比如,我们输入“确认过眼神,才能够遇到对的人”,点击检索一下,就可以得到检索结果:
检索结果 如图,检索框那一行显示的是检索时间为2.4秒,下面列出按相似度得分从大到小排序的前10篇歌词文档,包括排名、歌曲名、演唱歌手以及相似度得分。同时,每一个歌曲名是一个链接,可以点击。以点击排名第一的歌词文档《醉赤壁》链接为例,跳转链接:
醉赤壁 左侧显示的是《醉赤壁》这首歌的歌词内容,右侧显示的是抽取的结构化信息。观察左侧的歌词:
观察右侧抽取的结构化信息:
总结
本次分析使用了一些机器学习及自然语言处理(NLP)的知识。由于本人是研究图像处理的,对NLP也是初次尝试,加之时间有限,做得稍微粗糙了一些,如有错误欢迎指正。
网友评论