中文流行歌曲歌词文本挖掘

受刘思喆文章启发,尝试复现对22996首中文歌曲的文本挖掘分析,涉及分词、构建矩阵、矩阵约减和模式识别。使用Python读取json歌词数据,进行汉语分词,构建N-gram,发现“爱”字在歌词中占据重要位置,但未完全复现“爱情永远寂寞”主题。进一步分析需考虑更多超参数。
摘要由CSDN通过智能技术生成

刘思喆大佬一篇文章《爱情永远寂寞》的启发,对其中的文本挖掘技术非常感兴趣,遂产生了复制这个分析的想法。最近我一直在阅读各种各样的有趣分析,或者是Kaggle Notebooks,其中若有我比较感兴趣的主题、数据、算法,我都会尝试复现一下。

比如《爱情永远寂寞》这篇文章中提到的:

拿到22996 首中文歌曲(844 个流行歌手)之后,总觉得在这些非结构化数据背后肯定隐藏了什么,但到底会有什么模式呢?当经历了分词、构建矩阵、去除停止词、矩阵约减,最终通过模式识别,统计数字之后爱情居然是这样的一个真相

看上去还挺复杂的有没有?我之前只接触过Text Mining with R 这本书提供的方法,也就是构建N-gram。也不知道上边说的“构建矩阵”、“矩阵约减”、“模式识别”之类的方法怎么实现。但目前确定的是构建N-gram能够给出类似的文本词语关联关系。

这篇文章并没有给出分析用的原始代码及数据。那么复现类似的分析需要自己找一份歌词数据。在github上搜了一下,找到的是这个repo中所用的数据:

https://github.com/liuhuanyong/MusicLyricChatbot

数据是json格式的。首先我使用了Python读入json数据,使用jieba工具进行汉语分词。Python程序如下:

import jieba
import json
import time
import gc
import pandas as pd
import matplotlib.pyplot as plt

stopword_list = [k.strip() for k in open('../input/english-and-chinese-stopwords/stopwords.txt', encoding='utf8').readlines() if k.strip() != '']

music = []
for line in open('../input/chinese-pop-song-lyrics/music.json','r'):
    music.append(json.loads(line))
    
print('json文件总长度 {} '.format(len(music)))
# json文件总长度 140068 

lyrics = []
for i in music:
    lyrics.append(i['geci'])

def generate_ngrams(text, n_gram=2):
    '''得到N元组
    '''
    token = [k 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值