中国有嘻哈——押韵机器人

简介: [本文出自天外归云的博客园] 押韵机器人简介 近来群里看到有人谈起押韵机器,突然想起好多年前的回忆。 心血来潮写了一个押韵机器人。可以识别韵脚、比较韵脚、词汇列表按韵脚分类。   经测试,目前对多音字支持不好:比如唠嗑,唠叨。

[本文出自天外归云的博客园]

押韵机器人简介

近来群里看到有人谈起押韵机器,突然想起好多年前的回忆。

心血来潮写了一个押韵机器人。可以识别韵脚、比较韵脚、词汇列表按韵脚分类。

 

经测试,目前对多音字支持不好:比如唠嗑,唠叨。这种就识别会出错。欢迎大家继续测试,有问题反馈给我。

 

拼音识别基于pypinyin库实现,具体用法详见其github

押韵机器人代码

押韵机器人代码文件命名叫“punchliner.py”,代码如下:

from pypinyin import pinyin, lazy_pinyin, Style

words = ["今天","太躁","艾福杰尼","着迷","太绕","心间","","盛宴","榴莲","亏欠","二百五","腐乳","火锅底料","MC大笑","别跟我唠","我感冒","好不好","太早","住","兄弟","胸臆","太辣","太大","太炸","我手抖"]

def is_alphabet(uchar):
    rule1 = (uchar >= u'\u0041' and uchar<=u'\u005a')
    rule2 = (uchar >= u'\u0061' and uchar<=u'\u007a')
    if rule1 or rule2:
        return True
    else:
        return False

def get_punchline(word):
    last_character = word[len(word)-1]
    last_character_pinyin = pinyin(last_character)[0][0]
    punchline = []
    for the_char in last_character_pinyin:
        if not is_alphabet(the_char):
            punchline.append(last_character_pinyin.split(the_char)[0])
            punchline.append(the_char)
            punchline.append(last_character_pinyin.split(the_char)[1])
    return punchline

def compare_punchline(word1,word2):
    punchline1 = get_punchline(word1)
    punchline2 = get_punchline(word2)
    prefix1 = punchline1[0]
    prefix2 = punchline2[0]
    #前缀尾字母设定不为空
    prefix1_last_char = 'x'
    prefix2_last_char = 'x'
    if prefix1 != '':
        prefix1_last_char = prefix1[len(prefix1)-1]
    if prefix2 != '':
        prefix2_last_char = prefix2[len(prefix2)-1]
    #前缀先决条件,都是i或都不是i才算押韵
    pre_rule1 = (prefix1_last_char == 'i')
    pre_rule2 = (prefix2_last_char == 'i')
    all_i = (pre_rule1 and pre_rule2)
    all_not_i = 'i' not in [prefix1_last_char,prefix2_last_char]
    if all_i or all_not_i:
        rule1 = punchline1[1] == punchline2[1]
        rule2 = punchline1[2] == punchline2[2]
        if rule1 and rule2:
            return True
        else:
            return False
    else:
        return False

def classify_punchline(words_list):
    target = words_list[0]
    yayun_words = filter(lambda word:compare_punchline(target,word)==True,words)
    yayun_words_list = list(set(yayun_words))
    left_words_list = list(set(words_list)-set(yayun_words_list))
    print(yayun_words_list)
    rule1 = left_words_list != words_list
    rule2 = len(left_words_list) > 0
    if rule1 and rule2:
        classify_punchline(left_words_list)
    
if __name__ == '__main__':
    #print(get_punchline("变"))
    #print(get_punchline("案"))
    #print(get_punchline("绕"))
    #print(compare_punchline("安","翻"))
    #print(compare_punchline("变","案"))
    #print(compare_punchline("房","狼"))
    #print(get_punchline("唠"))
    classify_punchline(words)

其中:

1. 函数fuck_yayun可以对词藻列表中的词汇进行判断,把押韵的词汇进行自动归类;

2. 函数get_punchline可以获取词汇韵脚;

3. 函数compare_punchline可以比较韵脚。

希望有朝一日可以像发明AlphaGo一样发明AlphaRapper,让他去参加中国有嘻哈。

运行结果:

 

相关文章
|
2月前
|
传感器 人工智能 监控
智能耕耘机器人
智能耕耘机器人
43 3
|
4月前
|
传感器 人工智能 监控
农业科技和机器人结合
农业科技和机器人结合
42 1
|
传感器 供应链 安全
四个方面促进机器人产业健康成长
机器人前沿创新技术方面,医疗微创机器人、新一代协作机器人、高端仿生机器人等技术保持国际前沿水平,未来有望在家庭服务机器人、医疗康复机器人、工业视觉、云服务机器人等更多领域实现国际先进水平。
75 0
四个方面促进机器人产业健康成长
|
传感器 人工智能 供应链
国际机器人联合会:2022年机器人发展的五大趋势
在制造业和日常生活中,机器人的作用越来越大,国际机器人联合会(IFR)总结了机器人发展的五大趋势。
国际机器人联合会:2022年机器人发展的五大趋势
|
机器人 数据库
互联网是如何把“原始人”逼成“机器人”(2)
互联网是如何把“原始人”逼成“机器人”(2)
103 0
互联网是如何把“原始人”逼成“机器人”(2)
|
消息中间件 存储 缓存
互联网是如何把“原始人”逼成“机器人”(3)
互联网是如何把“原始人”逼成“机器人”(3)
103 0
互联网是如何把“原始人”逼成“机器人”(3)
|
缓存 Dubbo Java
互联网是如何把“原始人”逼成“机器人”(1)
互联网是如何把“原始人”逼成“机器人”(1)
互联网是如何把“原始人”逼成“机器人”(1)
|
传感器 人工智能 边缘计算
科沃斯机器人:让机器人拥有智能大脑,引领智能家居升级变革
南京人工智能研究院的成立对科沃斯机器人来说极具战略意义。
564 1
|
人工智能 自动驾驶 安全
云栖科技评论85期:为自动驾驶汽车迎回人类司机鼓掌
当Waymo宣布他们的自动驾驶汽车中重新坐入人类驾驶员的时候,所得到的应当是掌声而非质疑,正是负责任的态度让前沿科技走得更好、更稳,而不是贸然的激进式创新和不负责任的“创新应用”。
10563 0

热门文章

最新文章