Python有嘻哈:Crossin教你用代码写出押韵的verse
托某奇艺选秀节目的福,“嘻哈”无疑是这个夏天最热的音乐标签。年初的时候,我们教室实习生小D还是网易云上一只忧郁的民谣狗(参见 数据分析:当赵雷唱民谣时他唱些什么?)。没想到一夜之间,他的歌单已被HipHop占据,俨然一只黑怕老炮儿。
这对小D来说可谓一大利好:本来报个吉他班,学了仨月才把1645摸熟,如今去淘宝了一把嘻哈四件套,找段beat,药药切克闹,就嗨起来啦!
小D underground听多了就想找人battle。隔壁老王他早就不爽了,这次一定要写段词来diss他!但像小D这么real的rapper是绝对不屑套别人的词的,这可难为坏他小学及格的作文水平了。
小D一连几天闷头在纸上写写画画,也没憋出来几句。我实在看不下去了,不就是写点押韵的词嘛,交给哥来帮你搞定。小D一脸鄙夷:你还会写歌词?我微微一笑:词我是写不了,但我们会什么?编程啊!都什么时代了,还要靠人力嘛。
我的想法很简单:就是找些嘻哈歌手的歌词,把里面的词语都拿出来。当想要写一段歌词时,只要给一个参考词,就帮你找出押韵的备选词。当然太简单的单字押韵我都懒得列出来了,咱们要做就做双押和三押!
说干就干!
拿网易云的接口,抓了十几位中文嘻哈歌手的歌单,包括:
红花会、PGone、VaVa、艾福杰尼、BooM黄旭、Bridge、GAI爷、TizzyT、JonyJ、小青龙、辉子、孙八一、谢帝、马思维、满舒克、Mc光光
import requests url = 'http://music.163.com/api/playlist/detail?id=402614161'
req = requests.get(url) data = req.json()把他们的歌词全抓下来,共 459 首歌曲
import requests 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()用我们之前介绍过的结巴分词(参见【编程课堂】jieba-中文分词利器),把歌词处理下,分成一个个的词语,得到 21206 个词
import jieba seg_list = jieba.cut("我做的说唱从来不是为了混这圈子", cut_all=True) print("Full Mode: " + "/ ".join(seg_list))
''' 结果 Full Mode: 我/ 做/ 的/ 说唱/ 从来/ 从来不/ 不是/ 为了/ 混/ 这/ 圈子 '''用 xpinyin 将处理出来的词语转成拼音
from xpinyin import Pinyin p = Pinyin() print(p.get_pinyin(u"嘻哈"))
''' xi-ha '''有了拼音就好办了。从网上找个押韵表,把这些嘻哈词语分门别类,就大告功成啦。最后得到 2845 个双押及三押的备选词汇
一、佳麻 a ia ua 第十部 麻、佳半,部分入声
二、开来 ai uai 第五部 佳半、灰半
三、先寒 an ian uan üan 第七部 寒删先元半十四部覃盐咸
四、江阳 ang iang uang 第二部 江阳
五、逍遥 ao iao 第八部 萧肴豪
六、国歌 e o uo 第九部 歌,部分入声
七、灰微 ei ui 第三部 支微齐,部分入声
八、森林 en in un ün 第六部 真文元半,十三部 侵
九、冬青 eng ing ong iong 第一部 东冬,十一部 庚青蒸
十、希奇(儿)i(er并入) 第三部 支微齐,部分入声
十一、诗词 i(整体认读)第三部 支微齐,部分入声
十二、别叠 ie (y)e 部分入声,佳麻二韵部分字
十三、忧愁 ou iu 十二部 尤
十四、读书 u 第四部 鱼虞,部分入声
十五、须臾 ü 第四部 鱼虞,部分入声
十六、绝学 üe 部分入声
最后,用django搭个网站,把这功能做成可在线访问的
接下来,小D要做的事就只剩下:想一个词,然后去搜一下有什么其他词跟它配。比如要diss老王,搜一下“老王”:
于是小D就写下了:
隔壁老王,你不要嚣张,放学之后给我等在操场!
实在太方便啦!
如果你也想来首自己的嘻哈,点击文章下方的“阅读原文”,进入网站自个儿玩儿去吧!
想要完整代码及详细讲解的,请在公众号(Crossin的编程教室)里回复 嘻哈。
最后,本人亲自演示,如何用搜出来的双押词汇加上一段简单beat做出一段嘻哈歌曲。