python程序写诗_用Python作诗,生活仍有诗和远方

原标题:用Python作诗,生活仍有诗和远方

报 名

来源:TheodoreXu链接:

https://segmentfault.com/a/1190000013154329

常听说,现在的代码,就和唐朝的诗一样重要。

可对我们来说,写几行代码没什么,但是,要让我们真正地去写一首唐诗,那可就头大了。。既然如此,为何不干脆用代码写一首唐诗?

准备:

python3.6环境

推荐使用anaconda管理python包,可以对于每个项目,创建环境,并在该环境下下载项目需要的包。

推荐使用pycharm作为编译器。

GitHub代码:

https://github.com/theodore3131/TangshiGenerator

具体步骤:

使用爬虫爬取全唐诗,总共抓取了71000首。

#使用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")

使用正则表达式对爬取的数据进行处理

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

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

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

对诗词正文进行分词操作

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

forx injieba.analyse.textrank(content, topK= 600, allowPOS=( 'n', 'nr', 'ns', 'nt', 'nz', 'm')):

唐诗生成,处理韵脚

#使用pinyin库

pip install pinyin

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

#输出:tian

对于韵脚,本来是想找出所有的韵脚并做成字典形式存储起来,但韵脚总共有20多个,

后来发现其实20多个韵脚都是以元音字母开始的,我们可以基于这个规则来判断:

rhythm = ""

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

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

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

forp inrange(len(verse)- 1, - 1, - 1):

ifverse[p] inrhythmList:

ind = p

rhythm = verse[ind:len(verse)]

目前是最初级的五言律诗,且为名动名句式

rhythm = ""

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

whilenum < 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倒叙最后一个元音字母处截止

forp inrange(len(verse)- 1, - 1, - 1):

ifverse[p] inrhythmList:

ind = p

rhythm = verse[ind:len(verse)]

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

if(num == 3):

ind1 = 0

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

forp inrange(len(verse1)- 1, - 1, - 1):

ifverse1[p] inrhythmList:

ind1 = p

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

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

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

forp inrange(len(verse1)- 1, - 1, - 1):

ifverse1[p] inrhythmList:

ind1 = p

#随机排列组合

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

num += 1藏头诗

其实思路很简单,既然我们有了语料库,那么,我们每次在排列组合词的时候,只需保证生成每句时,第一个名词的第一个字,是按序给定四字成语中的即可

forx inrange(len(nounlist)):

ifnounlist[x][ 0] == str[num]:

i = x

来看一下结果:

四言诗:

所思浮云

关山车马

高楼流水

闲人肠断

五言律诗:

西风时细雨

山川钓建章

龙门看萧索

几年乡斜阳

藏头诗:

落花流水

落晖首南宫

花枝成公子

流水名朝廷

水声胜白石

参考:

https://segmentfault.com/a/1190000004571958

当然,现在生成的唐诗还是比较低级的,属于基础的古诗文词语排列组合。

接下来考虑优化模版,提取五言和七言常用句式作为模版。

另外考虑使用机器学习的方法,写RNN来让计算机自动生成充满韵味的诗。

(完)

4e0b0161738a46539e8430a60d9668f3.png

d6d7d0a65f8a4882aeb0dfd98df9ca90.jpeg

图文来自网络、如涉及版权问题,请联系我们以便处理。文章内容纯属作者个人观点,不代表本网观点。

19077b31bf87400b888b939d5edf33ef.png

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为鸿蒙手机beta版,鸿蒙2.0 Beta手机版来了!明年将全面支持华为手机

读创/深圳商报记者陈 姝备受关注的华为鸿蒙操作系统(HarmonyOS&#xff0c;以下简称鸿蒙)有了新进展。华为消费者业务软件部总裁王成录日前透露&#xff0c;将于12月16日在北京发布鸿蒙2.0手机开发者Beta版本。王成录在12月14日发微博称&#xff1a;“HarmonyOS正沿着我们在HDC…

Django 路由层

Django的下载与基本命令 下载Django&#xff1a;pip3 install django2.0.1创建一个django project: django-admin startproject luffy在mysite目录下创建应用&#xff1a;python manage.py startapp app01启动django项目:python manage.py runserver 8080 我们访问&#xff1a;…

caffe安装_目标检测之caffe-ssd模型训练与测试

最近把一个ssd网络的net..prototxt网络结构和自己生成的hdf5格式数据一起做训练时发现经常报错&#xff0c;因为ssd中一些层在caffe中并没有实现&#xff0c;需要自己写相应的.cpp,.cu文件重新编译&#xff0c;比较麻烦&#xff0c;而大家通常训练caffe-ssd都是基于原作者公开的…

Python之classmethod和staticmethod的区别

python中3种方式定义类方法&#xff0c;常规方式、classmethod修饰方式、staticmethod修饰方式。 class A(object):def foo(self, x):print(调用foo函数 (%s, %s)%(self, x))print(self:, self)classmethoddef class_foo(cls, x):print(调用class_foo函数 (%s, %s) % (cls, x))…

php开发微信图灵机器人

本着开源为原则&#xff0c;为这个世界更美好作出一份共享&#xff0c;我就给大家做个指路人&#xff0c;如果实用&#xff0c;记得给提供开源的朋友一些鼓励。 简单介绍一下实现思路&#xff0c;使用swoole扩展接管php运行&#xff0c;由于swoole只能在类UNIX上运行&#xff0…

jQuery源码的基础知识

序言&#xff1a;DOM addEventListener attachEvent与addEventListener区别适应的浏览器版本不同&#xff0c;同时在使用的过程中要注意attachEvent方法 按钮onclickaddEventListener方法 按钮click一、arguments对象&#xff1a; 1、arguments 属性 为当前执行…

python如何读取数据并输出为表格_Python实现将数据库一键导出为Excel表格的实例...

数据库数据导出为excel表格&#xff0c;也可以说是一个很常用的功能了。毕竟不是任何人都懂数据库操作语句的。 下面先来看看完成的效果吧。 数据源导出结果依赖 由于是Python实现的&#xff0c;所以需要有Python环境的支持 Python2.7.11 我的Python环境是2.7.11。虽然你用的可…

android手机连接无线路由器上网设置,手机连接无线网络怎么设置?手机Wifi无线网设置教程...

随着智能手机无线上网的流行&#xff0c;如今很多家庭都会组建Wifi无线网络&#xff0c;目前组建Wifi网络&#xff0c;大致有两种情况&#xff0c;一种是使用无线路由器&#xff0c;另外一种是将笔记本变身无线无路由器&#xff0c;从而实现智能手机也可以免费Wifi上网&#xf…

通俗易懂了解Vuex

1.前言 在使用Vue进行开发的时候&#xff0c;关于vue组件通信的方式&#xff0c;除了通俗易懂了解Vue组件的通信方式这篇博文谈到三种通信方式&#xff0c;其实vue更提倡我们使用vuex来进行组件间的状态管理以及通信问题。Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。…

netcore 内存限制_.NET Core 和 Serverless 构建飞速发展的架构

(给DotNet加星标&#xff0c;提升.Net技能)英文&#xff1a;samueleresca.net译文&#xff1a;cnblogs.com/Rwing/p/fast-growing译者&#xff1a;Rwing本篇文章的第一部分介绍了有关Serverless计算的基本概念。第二部分展示了如何构建 .NET Core的Lambda函数&#xff0c;其中使…

更多Requests的小技巧以及总结

对于requests的爬虫库&#xff0c;我们已经学到了尾声。 我们在这儿可以挖掘出更多的requests的使用小技巧。 一.cookie对象与字典的转换 在爬取目标cookie的时候&#xff0c;我们可以将cookie信息进行简化处理。 现在做一个简单的代码验证看看&#xff0c;使用百度的cookies&a…

进入Undertow Web服务器

随着Java EE 7的到来以及处理诸如Web Sockets API和HTTP升级&#xff08;例如EJB over HTTP&#xff09;之类的高级功能的要求&#xff0c;WildFly开发团队已经做出了重要决定。 在长期致力于JBoss Web服务器&#xff08;Apache Tomcat的一个分支&#xff09;之后&#xff0c;新…

centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置

CentOS6中关于网络配置的命令有很多&#xff0c;本文将介绍几个平时最长用的几个命令&#xff0c;以及网卡IP地址的配置和简单路由配置。1、经常使用的查看IP地址命令为 ifconfig&#xff0c;不跟参数的情况下默认查看所有已启用的网卡信息&#xff0c;如下图所示&#xff1a;如…

绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...

导读《绝地求生》火爆之余&#xff0c;很多人在想要加入这款游戏时&#xff0c;却被游戏传闻中的超高配置要求给吓到了&#xff0c;然后心生退意。事实上&#xff0c;吃鸡的配置要求真的这么高吗&#xff1f;其实并不是&#xff01;传言1&#xff1a;8G内存不能玩这则传言的说法…

《美团机器学习实践》高清PDF+思维导图+美团算法团队

在美团的搜索、推荐、计算广告、风控、图像处理等领域&#xff0c;相关的人工智能技术得到广泛的应用。《美团机器学习实践》包括通用流程、数据挖掘、搜索和推荐、计算广告、深度学习以及算法工程6大部分内容&#xff0c;全面介绍了美团在多个重要方面对机器学习的应用。通过本…

Java 8中的java.util.Random

Java 8中java.util.Random类的简洁功能之一是对其进行了改进&#xff0c;现在可以返回随机的数字流 。 例如&#xff0c;要生成一个介于0&#xff08;含&#xff09;和1&#xff08;不含&#xff09;之间的随机双精度数的无限流&#xff1a; Random random new Random(); Do…

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中&#xff0c;我碰到过这类的问题&#xff0c;使用find_element却找不到某个元素而产生异常&#xff0c;这就需要在操作某个元素之前判定该元素是否存在&#xff0c;而selenium中没有判定元素是否存在的方法&#xff0c;或者判定相同的元素有几个&#xff0c;需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字00。如下图所示&#xff08;见样例&#xff09;: A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达&#xff0c;谁完蛋&#xff01;」在去年特斯拉举办的 Autonomy Day 上&#xff0c;特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的&#xff0c;这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么&#xff0c;一大堆阑…