Python抓取歌词自制FreeStyle
故事的起因是上周六看《中国好声音》,一个周杰伦战队的学员用人工智能写的歌词,于是乎,我也有了这个想法,代码的主题思路是看Crossin先生的文章,虽然最后不能写出一首歌,但是押韵脚这事情分分钟搞定了
主题的思路,就是先抓取很多首歌曲的歌词,利用jieba分词后,将分好的词按照押韵表进行分类,最后匹配查询就可以了
准备一:押韵表
这个地方可以去网上搜押韵表
#引用各种需要的库
import requests
import jieba
import re
from xpinyin import Pinyin
p = Pinyin()
RhymeIndex = [(', ['an', 'ian', 'uan']),
(', ['ei', 'ui']),
(', ['i']),
(', ['qu', 'xu', 'yu'])]
RhymeDct = {',
',
',
'}
准备二:分词对应押韵表编码
分好的词与押韵表对应起来,举个栗子,比如“没有”对应的是“7-13”,就等于你给每个词都贴了一个标签,这样你以后想搜索的时候,就可以根据标签找到这些词了
def _analysis_words(words):
word_py =p.get_pinyin((u'{}'.format(words)))
lst_words = word_py.split('-')
r = []
for i in lst_words:
while True:
if not i:
break
token = RhymeDct.get(i, None)
if token:
r.append(token)
break
i = i[:]
if len(r) == len(words):
return '-'.join(r)
# print(_analysis_words('兄弟'))
第一步:爬虫抓取歌词信息
这个地方数据爬取的越多,肯定你的词库就越壮大,后面分词也越高,我这里只爬取了3首歌曲的歌词,并且最后是存储到txt中,当然,放数据库里就更好了
def GetKeyword():
#歌曲列表
# url = 'http://music.163.com/api/playlist/detail?id=808976784'
# req = requests.get(url)
# data = req.json()
# print(data['result']['tracks'] )
# tracks =data['result']['tracks'] #歌曲列表
tracks=[']
#写入记事本文件
with open('keyword.txt','a') as f:
f.write("[")
for i in tracks:
print()
#歌词
# lrcurl = "http://music.163.com/api/song/lyric?os=pc&id="+str(i['id'])+"&lv=-1&kv=-1&tv=-1"
lrcurl = "http://music.163.com/api/song/lyric?os=pc&id="+str(i)+"&lv=-1&kv=-1&tv=-1"
lrcreq = requests.get(lrcurl)
dt = lrcreq.json()
lrc=re.sub(u"\\[.*?]", "", dt['lrc']['lyric'])
#jieba分词
seg_list = list(jieba.cut(lrc, cut_all=True))
for i in seg_list:
#加入判断,只写入2个字组成的词
:
#写入格式:{'7-13':'追求'}
if _analysis_words(i)!=None:
f.write("{'"+_analysis_words(i)+"':'"+i+"'},")
f.write("]")
f.close()
第二步:调用分词的方法
GetKeyword()
第三步:分析分词后的txt
def Findkey(str):
result={}
with open('keyword.txt', 'r') as f:
# print(f.readlines())
list=eval(f.readlines()[])
for item in list:
if item.get(str):
key=item.get(str)
number=result.get(key)
#如果一个词出现多次,进行次数累加,用来表示频次
:
result[key]=number+
else:
result.update({key:})
f.close()
print(result)
第四步:程序入口
key=input("请输入关键词:")
str=_analysis_words(key)
print("匹配押韵的词:")
Findkey(str)
第五步:创作自己的 FreeStyle
# hello 大家好,我的名字叫离岛 # 没事爱在博客写写,这感觉让我惬惬 # 写代码不是男生的事,女生不是只能做测试 # 热爱编码,没有办法 # 他们都叫我是热爱编码的Coding女生
作者:离岛
出处:https://segmentfault.com/a/1190000015932069

Python抓取歌词自制FreeStyle的更多相关文章
- Python 抓取网页并提取信息(程序详解)
最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...
- 使用 Python 抓取欧洲足球联赛数据
Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 ...
- python抓取性感尤物美女图
由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...
- python抓取网页例子
python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...
- 如何用python抓取js生成的数据 - SegmentFault
如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...
- 关于python抓取google搜索结果的若干问题
关于python抓取google搜索结果的若干问题 前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...
- 用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...
- python抓取月光博客的全部文章而且依照标题分词存入mongodb中
猛击这里:python抓取月光博客的全部文章
随机推荐
- 团队开发中,eclipse中安装jre
团队合作中配置jre时,jre名称应该保持一致,否则不要提交.classpath文件 window-preferences 团队合作中,JRE name一定要一致!
- Hadoop HBase概念学习系列之概念视图(又名为逻辑模型)(八)
其实啊,我们把HBase想象成一个大的映射关系,再者,本来,HBase存储的数据可以理解为一种key和value的映射关系,但有不是简简单单的映射关系那种,因为比如有各个时间戳版本啊. 通过行键.行键 ...
- 内置数据结构(str)
一.字符串(str) 1.字符串在python2版本中为一个byte序列,在python3版本中为一个unicode序列,并且字符串是不可变的. sr = str() sr = 'string' sr ...
- python第二十三课——dict中的函数
dic1 = {...} dic2 = {...} dic1.update(dic2) 1.update(dict):dic1调用update传入dic2,如果dic2中的内容在dic1中不存在,那么 ...
- hdu2102
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014303647/article/details/27705195 题目链接: pid=2102& ...
- CVE-2017-8046 复现与分析
环境搭建 使用的项目为https://github.com/spring-guides/gs-accessing-data-rest.git里面的complete,直接用IDEA导入,并修改pom.x ...
- Kubernetes 详解
Kubernetes主要由以下几个核心组件组成: etcd保存了整个集群的状态: apiserver提供了资源操作的唯一入口,并提供认证.授权.访问控制.API注册和发现等机制: controller ...
- print输出
python中的print输出可以用逗号"," >>> a = 1 >>> b = 2 >>> print a,b 1 2 逗 ...
- springboot整合mybatis将sql打印到日志
在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...
- 红米5/红米5 Plus逼出最强魅蓝Note6?降价后已成性价比神机
从品牌到产品命名,小米旗下的红米与魅族旗下的魅蓝似乎是一对天生的对手,如今小米即将发布千元全面屏的红米5/红米5 Plus,暂时没有全面屏手机推出的魅蓝也拿出了自己的应对策略,魅蓝的办法简单粗暴:直接 ...