Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ rhyme Public
forked from zx576/rhyme

收集分析一些嘻哈说唱歌词中双押甚至三押词汇

Notifications You must be signed in to change notification settings

WaymonHe/rhyme

Repository files navigation

分析说唱歌手歌词,提取押韵词汇

结果

本项目一共分析了 459 首不重复的歌曲,歌手与网易歌单ID分别为:

  • 红花会: 799977314
  • PGone : 447516565
  • VaVa : 808488091
  • 艾福杰尼: 510860563
  • BooM黄旭: 714593343
  • Bridge: 639741735
  • GAI爷: 557229147
  • TizzyT: 462399965
  • JonyJ: 49527655
  • 小青龙:808976784
  • 辉子: 714778058
  • 孙八一:776141176
  • 谢帝: 55433749
  • 马思维: 155059572
  • Mc光光:126482980
  • 满舒克:110228333

以上 ID 为手动在网易云上查找获取。

分析过后共产生了 21206 个词汇 以及 2845 个韵脚

文件说明已经项目运行流程

settings.py

一些通用的设置,涵盖了数据库名 歌单ID 最后的产出文件名

models.py

数据库设置文件 使用 peewee 建立需要的表和字段

rhyme_index.py

包含预设的韵脚

spider.py

爬歌词文件,分两部进行

  1. 爬取每个歌单内歌曲名 ID
  2. 爬取每个歌曲歌词 保存到数据库

analysis.py

分析歌词

  1. 逐行导入歌词
  2. 使用 jieba 切割歌词为词汇,同时也取每行歌词后两词添加到歌词中
  3. 使用 rhyme_index 文件中的预设韵脚匹配词汇
  4. 匹配后保存到数据库

extract.py

根据韵脚提取押韵词汇,集合到一个 txt 文件中

utils.py

调试阶段使用的工具函数

rhymewords-2.txt/ rhymewords-3.txt 分别包含双押以及三押以上词汇 words-frequency-n.txt / words-frequency-v.txt 分别为名词以及动词词频排行榜

自定义运行流程

自定义分析歌词,可以按照以下顺序运行

  1. 自定义 settings.py 中的设置
  2. 运行 spider.py 文件
  3. 运行 analysis.py 文件
  4. 运行 extract.py 文件

到此,可到当前文件夹下查看生成的 txt 文件, analysis.py 的运行时间可能稍长,耐心等待. 注意: 如果需对歌词重新分析,只需运行 utils.py 文件即可,该文件会删除现有的分析结果,但不会删除已经下载的歌词.

技术细节

1、请求网易云 api 接口

本项目使用到了歌单接口,以及歌词接口,使用方法如下:

请求歌单

分别去请求我们手动获取的歌单 ID, 得到歌单内所有歌曲的 ID

import requests
# 实际使用时修改歌单 id 即可
url = 'http://music.163.com/api/playlist/detail?id=402614161'
req = requests.get(url)
data = req.json()
print(data)

请求 歌词

从上一步请求歌单的结果中可以提取歌单内所以歌曲的ID,继续请求获取歌词

import requests
# 实际使用时修改歌曲 id 即可
url = 'http://music.163.com/api/song/lyric?os=pc&id=411988938&lv=-1&kv=-1&tv=-1'
req = requests.get(url)
data = req.json()
print(data)

2、peewee 处理数据库部分

点我: 官方文档

如果你也厌倦了写原生的 sql 语句,在简单的项目中, 使用 peewee 是较好的选择.

简单的建表流程如下

from peewee import *
db = SqliteDatabase('peewee.db')
# 歌词
class Lrc(Model):
 # 音乐ID
 music_id = IntegerField()
 # 音乐名
 music_name = CharField()
 # 歌手
 singer = CharField()
 # 歌词
 lrc = TextField()
 class Meta:
 database = db
db.connect()
db.create_tables([Lrc])

运行以上代码就在 peewee.db 数据库文件中建立好了一张表.更详细的用法参考文档,以及本项目中的代码

3 jieba 分词处理

点我:官方地址

jieba 是一个非常好用的中文分词库,简单的示例代码如下

import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
'''
结果:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

'''

4 xpinyin 转换文字为拼音

点我:官方文档 xpinyin 是一个中文文字拼音转换库,使用方法如下


>>> from xpinyin import Pinyin
>>> p = Pinyin()
>>> # default splitter is `-`
>>> p.get_pinyin(u"上海")
'shang-hai'

About

收集分析一些嘻哈说唱歌词中双押甚至三押词汇

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%

AltStyle によって変換されたページ (->オリジナル) /