想必最近大家家庭群里最近都会看到这么一张图:

一惊,这什么玩意儿???后来一搜会发现里面不同的诗句来自于不同的古诗,嘛,这不是很好玩的一件事情吗?这次我们使用Github的唐诗宋词dataset:https://github.com/chinese-poetry/chinese-poetry

来写一个简单的藏头诗生成器。

迎合最近大家在家的心情,以下是效果图:

我只讲思路不说详细的代码讲解:代码地址:https://github.com/timcanby/Chinese_acrostic_generator(给star的是好青年)

其实这件事就是先观察数据:

数据是这个样子的,句子长短不一,有作者,编号信息,标题和本文。那么我们需要做的事情就是,统一诗句横向长度,以及顺利遍历所有的数据。所以问题转移到,step1:遍历文件夹数据和json数据的导出 step2:抽取每句诗第一个字做匹配  step3:根据所需诗句长度来当匹配的条件 step4:随机抽取同样头文字的诗句 step5:按照目标语句顺序输出 step6:针对数据库中不对应汉字的情况做异常处理。

所以首先就是遍历所有的json文件了,这个每个人操作不同

我选择使用 os.listdir所以读目标文件下所有的文件就是:

def getfileFromfilter(rootdir):list = os.listdir(rootdir)ReturnList=[]for i in range(0, len(list)):if list[i]!='.DS_Store':path = os.path.join(rootdir, list[i])ReturnList.append(path)return (ReturnList)

rootdir下所有文件名会以list的形式返回。

接下来就是json文件的读入了

咱们

import json

这是个很方便的标准库,想了解更多:https://www.json.org/json-en.html

然后

 f=open(eachJson ,'r',encoding='utf-8')dict=json.load(f)

这样所有的数据就会变成dict词典形式

建立一个用于存筛选过的句子的字典:

sentencelist={}

然后开始筛选我们要的诗句,

我们找到属性名是

['paragraphs'](诗句)

所以直接用这个做匹配:

 try:f=open(eachJson ,'r',encoding='utf-8')dict=json.load(f)for each in dict:for eachsentence in each['paragraphs']:if len(eachsentence)==weight:for eachCharacter in text:if eachsentence[0] == eachCharacter:sentencelist[each['author'],each['title'],eachsentence]=eachCharacterexcept:continue

这里weight是诗句长度,可以是12也可以是16,8言就是16,先用长度来筛选后再匹配每句第一个词 。eachsentence 是句子,那么eachsentence 【0】自然就是第一个文字。为了方便查找,匹配后所有的诗句作为key,对应的头文字作为value存进sentencelist这个词典。存出来是这样的:(这里我还存了['author'],['title']以方便以后使用)

因为key不能重复这个大家都知道。

    for eachcha in text:txt=[]for key, value in sentencelist.items():if value==eachcha:txt.append(key)print(random.choice(txt)[2])

然后最后再扫一遍用户要的字符串做randomlist抽选就ok了!

整个过程非常非常简单,甚至这个版本有很多冗余的操作,仅供初学者参考!!!转载留地址,github期待star~~

python文本处理入门:44行代码写一个简单的藏头诗生成器相关推荐

  1. python编写程序输出诗句_Python文本处理简介:44行代码编写一个简单的隐藏诗生成器,python,入门,藏头诗...

    想必最近大家家庭群里最近都会看到这么一张图: 一惊,这什么玩意儿???后来一搜会发现里面不同的诗句来自于不同的古诗,嘛,这不是很好玩的一件事情吗?这次我们使用Github的唐诗宋词dataset:ht ...

  2. 用python60行代码写一个简单的笔趣阁爬虫!三分一章?

    前言 利用python写一个简单的笔趣阁爬虫,根据输入的小说网址爬取整个小说并保存到txt文件.爬虫用到了BeautifulSoup库的select方法 结果如图所示: 本文只用于学习爬虫 一.网页解 ...

  3. [教你做小游戏] 用86行代码写一个联机五子棋WebSocket后端

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...

  4. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  5. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  6. python藏头诗生成器_GitHub - chenjiahui/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...

    Chinese_poem_generator 唐诗宋词生成器,MC胖虎,使用LSTM完成,先看几个demo: 一首藏头诗刀山火海送给大家! 胖虎学诗,会对偶,用典故,能作出边塞.田园.离别等多种风格的 ...

  7. python藏头诗生成器_GitHub - songyifan427/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...

    Chinese_poem_generator 唐诗宋词生成器,MC胖虎,使用LSTM完成,先看几个demo: 一首藏头诗刀山火海送给大家! 胖虎学诗,会对偶,用典故,能作出边塞.田园.离别等多种风格的 ...

  8. python藏头诗_如何使用Python做一个藏头诗生成器?

    藏头诗是可以利用Python做出来呃,具体是如何做的呃,下面随融跃小编一起了解一下! 爬取诗句 在百度搜索"我开头的诗句",可以进入到百度汉语的页面,该页面会显示所有以" ...

  9. python爬虫代码1000行-简单用14行代码写一个Python代理IP的爬虫

    相信用别的语言只用14行是写不出来这样的效果的!而我们的Python 只需要区区的14行代码就能写出来哦! 这就是Python为什么是全球现在比较流行的语言之一了!因为简单 容易学! 比较上手! 现在 ...

最新文章

  1. 语义分割--Attention to Scale: Scale-aware Semantic Image Segmentation
  2. java neo4j rest api_Neo4j REST API使用教程
  3. 网络编程学习笔记(ICMPv6和IPv6套接口选项)
  4. sql SUBSTR
  5. Concurrent包下的常用并发类和普通类之间的区别
  6. Eclipse 各种快捷键
  7. 那些年,画家发明的黑科技
  8. js 解除网页右键菜单被禁用
  9. android jackson 解析json字符串,android:json解析的两个工具:Gson和Jackson的使用小样例...
  10. 作者:姚前(1970-),男,中国人民银行征信中心副主任、高级工程师
  11. android jar包冲突_用好这几个技巧,解决Maven Jar包冲突易如反掌
  12. 今天来了一位妹纸面试,我问她:线程池中多余的线程是如何回收的?她有点懵~...
  13. mac pro制作iso系统光盘
  14. imx8mm偶现启动内核失败问题分析报告
  15. 系统架构设计师论文范文
  16. linux jdk下载并安装
  17. Linux操作系统基础命令
  18. 根据卫星运动矢量计算轨道六根数
  19. Linux中的远程连接
  20. 小白快速学习 Kotlin 语法基础

热门文章

  1. C语言:小球垂直下落
  2. linux 红帽双机配置,Redhat Linux安装keepalived实现双机热备
  3. 探究 Go Profile-Guided Optimizations(PGO)
  4. 架构师如何应对复杂业务场景?领域建模的实战案例解析
  5. Stata连玉君课程笔记(一)
  6. Java实验报告一(完全数、一年四季、杨辉三角、path和classpath区别、next()和nextLine()区别)
  7. 操作系统的访问控制设计实例研究
  8. 《大数据架构详解》一书再版意见征集
  9. 信号系统|信号的分类|确定信号与随机信号 连续信号与离散信号 周期信号与非周期信号 能量信号与功率信号 奇异信号
  10. Azure基础:何时使用Azure 虚拟桌面(AVD)(12)