怎么做一直弹窗口网站,怎么把几个网站做互通,wordpress源码最新,传媒网站如何设计原标题#xff1a;用Python作诗#xff0c;生活仍有诗和远方
报 名
来源#xff1a;TheodoreXu链接#xff1a;
https://segmentfault.com/a/1190000013154329
常听说#xff0c;现在的代码#xff0c;就和唐朝的诗一样重要。
可对我们来说#xff0c;写几行代码没什么用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_certscertifi.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)]
#确保24句的韵脚相同保证押韵
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来让计算机自动生成充满韵味的诗。
完图文来自网络、如涉及版权问题请联系我们以便处理。文章内容纯属作者个人观点不代表本网观点。责任编辑