故事的起因是上周六看《中国好声音》,一个周杰伦战队的学员用人工智能写的歌词,于是乎,我也有了这个想法,代码的主题思路是看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的更多相关文章

  1. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  2. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  3. python抓取性感尤物美女图

    由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...

  4. python抓取网页例子

    python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...

  5. Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>

    Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...

  6. 如何用python抓取js生成的数据 - SegmentFault

    如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...

  7. 关于python抓取google搜索结果的若干问题

    关于python抓取google搜索结果的若干问题     前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...

  8. 用python抓取智联招聘信息并存入excel

    用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...

  9. python抓取月光博客的全部文章而且依照标题分词存入mongodb中

    猛击这里:python抓取月光博客的全部文章

随机推荐

  1. IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段(A、B、C三类地址)【转】

    简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号和主机号. InterNIC将IP地址分为五类:A类保留给ZF或大型企业,B类分 ...

  2. Linux 用户和用户组详解

    用户分类 超级用户:UID范围 0 root用户:uid=0(root) gid=0(root) groups=0(root) 普通用户:由管理员创建,UID范围(500-65535) --> ...

  3. Linux ss命令详解

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息 ...

  4. maven项目中引入Jstl

    <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api& ...

  5. 51 nod 1682 中位数计数

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1682 1682 中位数计数 基准时间限制:1 秒 空间限制: ...

  6. 数据库学习之中的一个: 在 Oracle sql developer上执行SQL必知必会脚本

    1 首先在開始菜单中打开sql developer: 2. 创建数据库连接 点击左上角的加号 在弹出的对话框中填写username和password 測试假设成功则点击连接,记得角色要写SYSDBA ...

  7. leetcode第一刷_N-Queens

    八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对 ...

  8. Linux - 搭建FastDFS分布式文件系统

    1. FastDFS简介 说明:FastDFS简介部分的理论知识全部来自于博主bojiangzhou的 <用FastDFS一步步搭建文件管理系统>,在此感谢博主的无私分享.当然最最要感谢的 ...

  9. ZOJ 2475 Benny's Compiler(dfs判断有向图给定点有没有参与构成环)

    B - Benny's Compiler Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  10. openvpn-在Linux中安装和配置OpenVPN Server的最简便方法!(转)

    在Linux中安装和配置OpenVPN Server 出于本文的需要,我将使用两个运行CentOS 7 64位版本的系统.一个充当OpenVPN服务器,另一个充当OpenVPN客户机.下面是测试系统的 ...