美文网首页python热爱者Python新世界
文艺程序员丨基于Python的诗和远方,我有python也有诗!

文艺程序员丨基于Python的诗和远方,我有python也有诗!

作者: 48e0a32026ae | 来源:发表于2018-11-20 15:48 被阅读0次

    概述



    前言

    准备工作

    具体步骤

    唐诗生成

    藏头诗规则

    结果

    阿广说

    群聊交流

    福利一刻

    推荐阅读

    前言

    很从小到大,我们读过太多的古诗,爱国诗、缅怀诗、相思诗等等。古往今来,我的认知中,李白是个好人!往往一个女的说一个男的是一个好人,那就证明她不爱他。不,阿广是爱李白的,不为别的,只为他给天下爱酒之人找到了古往今来最佳的喝酒理由。

    有一年重阳节,陶渊明家里没酒了,只好坐在家门口发呆,无聊的采了一把菊花,闻闻花香过瘾。正在无比烦恼的时候,忽见门外来了穿白衣的人,说奉王弘之命前来送酒。陶渊明大喜,菊花也不要了。拿过酒来,一饮而尽。于是又创作了一首流传千古的古诗。

    我想大家都学过“类比”的思想,阿广也不例外。于是我也在重阳节那天,假装自己家中没酒了,坐在家门口同样发呆,甚至还想抽两口香烟,无聊的时候采了一把贴着“我正在午睡,请勿践踏”的小草,偶尔闻闻草的青涩。正准备抽两口香烟排解心头之感的时候,并未迎来奉命之人送来作诗之酒。小悲之后,拿过82年的优酸乳一饮而尽。于是,又创作了一个永垂不朽的基于Python的唐诗生成器。

    准备工作

    环境:Python3.6

    包:anaconda管理Python包

    编译器:Pycharm

    具体步骤

    爬取7w余首唐诗

    #使用urllib3的内置函数构建爬虫的安全验证,来应对网站的反爬虫机制

    http = urllib3.PoolManager(

    cert_reqs='CERT_REQUIRED',

    ca_certs=certifi.where())

    #爬虫的目标网站

    r = http.request('GET', url)

    #爬虫获取的html数据

    soup = BeautifulSoup(r.data, 'html.parser')

    content = soup.find('div', class_="contson")

    RE对数据进行处理

    p1 = r"[\u4e00-\u9fa5]{5,7}[\u3002|\uff0c]" #[汉字]{重复5-7次}[中文句号|中文逗号]

    pattern1 = re.compile(p1) #编译正则表达式

    result = pattern1.findall(poemfile) #搜索匹配的字符串,得到匹配列表

    分词操作

    #使用jieba中文分词库的textRank算法来找出各个词性的高频词

    for x in jieba.analyse.textrank(content, topK=600, allowPOS=('n', 'nr', 'ns', 'nt', 'nz', 'm')):

    唐诗生成

    使用pinyin库对韵脚进行处理

    pip install pinyin

    verse = pinyin.get("天", format="strip")

    #输出:tian

    韵脚数量为20+,且都是以元音字母开始,所以可以根据规则判断

    rhythm = ""

    rhythmList = ["a", "e", "i", "o", "u"]

    verse = pinyin.get(nounlist[i1][1], format="strip")

    #韵脚在每个pinyin倒叙最后一个元音字母处截止

    for p in range(len(verse)-1, -1, -1):

    if verse[p] in rhythmList:

    ind = p

    rhythm = verse[ind:len(verse)]

    五言律诗,名动名句式

    rhythm = ""

    rhythmList = ["a", "e", "i", "o", "u"]

    while num < 4:

    #生成随机数

    i = random.randint(1, len(nounlist)-1)

    i1 = random.randint(1, len(nounlist)-1)

    j = random.randint(1, len(verblist)-1)

    #记录韵脚

    ind = 0

    ind1 = 0

    if (num == 1):

    rhythm = ""

    verse = pinyin.get(nounlist[i1][1], format="strip")

    #韵脚在每个pinyin倒叙最后一个元音字母处截止

    for p in range(len(verse)-1, -1, -1):

    if verse[p] in rhythmList:

    ind = p

    rhythm = verse[ind:len(verse)]

    #确保2,4句的韵脚相同,保证押韵

    if (num == 3):

    ind1 = 0

    verse1 = pinyin.get(nounlist[i1][1], format="strip")

    for p in range(len(verse1)-1, -1, -1):

    if verse1[p] in rhythmList:

    ind1 = p

    while verse1[ind1: len(verse1)] != rhythm:

    i1 = random.randint(1, len(nounlist)-1)

    verse1 = pinyin.get(nounlist[i1][1], format="strip")

    for p in range(len(verse1)-1, -1, -1):

    if verse1[p] in rhythmList:

    ind1 = p

    #随机排列组合

    print(nounlist[i]+verblist[j][1]+nounlist[i1])

    num += 1

    https://github.com/zandaoguang/poem

    藏头诗规则

    对语料库进行排列组合,但需保证每次在排列组合词的时候,生成的每句话,第一个名词的第一个字是按照序给定的四字成语即可。

    for x in range(len(nounlist)):

    if nounlist[x][0] == str[num]:

    i = x

    结果

    五言律诗(以生成的三篇律诗为例):

    萧索来千年

    重阳头故国

    万年忧童子

    白发顾旧国

    青楼到一行

    高台手子孙

    凤凰风冠盖

    玉壶意浮云

    婵娟向古人

    五湖夜子孙

    东风心月光

    银河道浮云

    四言诗:

    所思浮云

    关山车马

    高楼流水

    闲人肠断

    藏头诗(落花流水):

    落晖首南宫

    花枝成公子

    流水名朝廷

    水声胜白石

    阿广说

    记阿广平淡而不平凡,简约而不简单的一天,感叹于酒是最好的诗,诗是最好的酒。

    国无人莫我知兮

    华亭鹤唳讵可闻

    幄笼轻日护香霞

    奈此朱梁跋扈何

    霓为衣兮风为马

    千年逢缘得相聚,梦亦人生筱雨飞。

    九天散尽群星爠,路尽萧歌忆具灰。

    梅寒一季风散雪,冰藏百丈芬幽劲。

    残阳溺雪烟消幕,月光叠水虚此行?

    我希望我们能够在一起研究学术、探讨生活、能够谈天说低,我希望我们能够分享各自的生活和趣事,所以我创建了两个群,为读者提供了分享知识、传递正能量的平台

    相关文章

      网友评论

        本文标题:文艺程序员丨基于Python的诗和远方,我有python也有诗!

        本文链接:https://www.haomeiwen.com/subject/zirxqqtx.html