python自动生成五言绝句,一定让你学会他!!


前言

如今的时代,人工智能渗透到了我们每一个人的心中,但是其背后的数学原理和编写代码训练模型让我们一般人无法接触到他的内心!


所以这篇文章让你能轻松编写出一个能写出五言律诗的AI,并且理解到为什么AI能写出这种朗朗上口的诗句!

一、五言律诗是什么?

简单来说就是每句话都是五个字,然后遵循一定的基本韵律。
而这里的韵律是AI能写出朗朗上口诗的决定因数!
这里我们采用的韵律如下:
第一句: X X X仄仄平平,第二句:平平 X X X仄平。
第三局: X X X平平仄仄,第四句: X X X仄仄平平。
其中 X X X这代表既可以是仄也可以是平。
当然我们的模型写的诗句只能做到朗朗上口,不能做到是一首好诗!

二、生成模型

1.诗词库

上述我们知道了一首五言律诗的韵律(这可以使他能够朗朗上口),那么我们就知道了一首诗的大致选词。而这其中就需要一个诗词库在背后,才能创造出一首诗。
诗词库的生产原理就是:

先将成千百首经典五言律诗选出来,并且进行句子拆分

将每句话拆分成两部分:也就是把 X X X X X XXXXX XXXXX分成 X X XX XX X X X XXX XXX两部分。对应上述的韵律可以推出下表:
在这里插入图片描述
根据表格,我们将符合韵律的诗词添加到相应的表格。因为篇幅有限,我把各列表其中出现频率最高的词汇展现出来。下表就是:
在这里插入图片描述
上述的表格的词汇比较少,所以直接放在代码中也行。

Dictionary=[
    ['羞玉', '流泪', '窈窕', '雪满', '月色', '愁苦', '浮云', '伤剔', '哀苦', '回首'],
    ['未曾看', '斩楼兰', '寄燕然', '水生烟', '凤楼酣', '暗无边', '绕林阁', '竟不还', '贵乡还', '泪遥传'],
    ['燕然', '芙蓉', '鸳鸯', '梅花', '江南', '春风', '佳人', '斜阳', '西湖', '微霜'],
    ['水月牵', '寻岳仙', '哀苦寒', '觉夜寒', '嬉笑牵', '独去闲', '上酒船', '流泪泉', '不可攀', '走百川'],
    ['凤楼', '故情', '染香', '雾花', '水晶', '雪恨', '落花', '卷珠', '相思', '当年'],
    ['人不见', '留不佳', '追往事', '空怅望', '谁念我', '肠断处', '多少恨', '空相忆', '凝望久', '都莫问'],
    ['白玉', '夜郎', '多苦', '一笑', '憔悴', '无限', '寂寞', '惟有', '疑是', '远忆'],
    ['晚妆残', '莫留连', '憩言欢', '望长安', '老红颜', '醉不眠', '见苍天', '蔽青天', '涕衣沾', '齿开难'],
]

2.生成一首五言律诗

有了词库后,在不考虑其诗词的逻辑性,只考虑他的韵律而言,我们只需要随机的组合他们就行了。是不是这样就觉得,原来AI写诗也不是不能自己做:)
所以我们把他的生成函数写上:

#获取8位数字key,此时key是字符串
def produce(key):
    res=''
    cnt=0
    for i in range(len(key)):
        #从词典中获取相应位置的词汇
        res+=Dictionary[cnt][int(key[i])]
        cnt+=1
    ans=''
    cnt=0
    #添加标点符号
    for i in res:
        cnt+=1
        ans+=i
        if cnt%5==0 :
            if cnt%2==0: ans+='。'
            else: ans+=','
    return ans

有了生成函数以及词典后,我们就可以生成一首五言律诗啦!
结合上面的词典,我们合成一下。

Dictionary=[
    ['羞玉', '流泪', '窈窕', '雪满', '月色', '愁苦', '浮云', '伤剔', '哀苦', '回首'],
    ['未曾看', '斩楼兰', '寄燕然', '水生烟', '凤楼酣', '暗无边', '绕林阁', '竟不还', '贵乡还', '泪遥传'],
    ['燕然', '芙蓉', '鸳鸯', '梅花', '江南', '春风', '佳人', '斜阳', '西湖', '微霜'],
    ['水月牵', '寻岳仙', '哀苦寒', '觉夜寒', '嬉笑牵', '独去闲', '上酒船', '流泪泉', '不可攀', '走百川'],
    ['凤楼', '故情', '染香', '雾花', '水晶', '雪恨', '落花', '卷珠', '相思', '当年'],
    ['人不见', '留不佳', '追往事', '空怅望', '谁念我', '肠断处', '多少恨', '空相忆', '凝望久', '都莫问'],
    ['白玉', '夜郎', '多苦', '一笑', '憔悴', '无限', '寂寞', '惟有', '疑是', '远忆'],
    ['晚妆残', '莫留连', '憩言欢', '望长安', '老红颜', '醉不眠', '见苍天', '蔽青天', '涕衣沾', '齿开难'],
]
def produce(key):
    res=''
    cnt=0
    for i in range(len(key)):
        #从词典中获取相应位置的词汇
        res+=Dictionary[cnt][int(key[i])]
        cnt+=1
    ans=''
    cnt=0
    #添加标点符号
    for i in res:
        cnt+=1
        ans+=i
        if cnt%5==0 :
            if cnt%2==0: ans+='。'
            else: ans+=','
    return ans
if __name__ == '__main__':
    s=input('请输入8个随机数字!\n')
    print(produce(s))

运行效果,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时我们就可以看到他生成的五言律诗:
流泪寄燕然,梅花嬉笑牵。雪恨多少恨,惟有涕衣沾。
读着是不是郎朗上口呀:)


项目—简单的“五律”生产系统

最后我们整合一下他们,让他多几个功能,比如这八位数字是不是和我们的出生日期长度一致呀!,所以我们整合代码如下:

import random as r
zd=[
    ['羞玉', '流泪', '窈窕', '雪满', '月色', '愁苦', '浮云', '伤剔', '哀苦', '回首'],
    ['未曾看', '斩楼兰', '寄燕然', '水生烟', '凤楼酣', '暗无边', '绕林阁', '竟不还', '贵乡还', '泪遥传'],
    ['燕然', '芙蓉', '鸳鸯', '梅花', '江南', '春风', '佳人', '斜阳', '西湖', '微霜'],
    ['水月牵', '寻岳仙', '哀苦寒', '觉夜寒', '嬉笑牵', '独去闲', '上酒船', '流泪泉', '不可攀', '走百川'],
    ['凤楼', '故情', '染香', '雾花', '水晶', '雪恨', '落花', '卷珠', '相思', '当年'],
    ['人不见', '留不佳', '追往事', '空怅望', '谁念我', '肠断处', '多少恨', '空相忆', '凝望久', '都莫问'],
    ['白玉', '夜郎', '多苦', '一笑', '憔悴', '无限', '寂寞', '惟有', '疑是', '远忆'],
    ['晚妆残', '莫留连', '憩言欢', '望长安', '老红颜', '醉不眠', '见苍天', '蔽青天', '涕衣沾', '齿开难'],
]
def sc(s):
    res=""
    cnt=0
    for i in range(len(s)):
        res+=zd[cnt][int(s[i])]
        cnt+=1
    cnt=0
    for i in res:
        cnt+=1
        print(i,end='')
        if cnt%5==0 :
            if cnt%2==0: print(end='。')
            else:print(end=',')
    print()

def show():
    mp='!!!欢迎使用五言律诗生成器!!!\n功能如下:\n1.随机生成一首五言律诗\n2.输入您的出生日期,生成专属与你的无律诗!\n(日期格式:XXXX:XX:XX)\n3. 3. 退出系统。\n输入您想要的运行的功能:'
    print(mp)
	
	
	

def st():
    show()
    while True:
        try:
            key=int(input())
            if key==1:
                p=''
                for i in range(8):
                    p+=str(r.randint(0,9))
                try: sc(p)
                except Exception:
                    print('异常说明')
            elif key==2:
                p=input()
                p=p.split(':')
                p=''.join(p)
                try: sc(p)
                except Exception:
                    print('日期格式错误,请重新输入正确格式!')
            else:
                print('欢迎再次使用!!')
                break
        except Exception:
            print('请输入正确选项!')


if __name__=='__main__' :
    st()

我们允许程序进入显示菜单:
在这里插入图片描述
我输入1,执行功能1:
在这里插入图片描述
我们键入2,并输入自己的出生日期,他将会生产一个专属于你的五言律诗:
在这里插入图片描述
最后我们键入3,退出系统:
在这里插入图片描述

总结

欢迎各位评论!:)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值