python文本处理入门:44行代码写一个简单的藏头诗生成器
想必最近大家家庭群里最近都会看到这么一张图:
一惊,这什么玩意儿???后来一搜会发现里面不同的诗句来自于不同的古诗,嘛,这不是很好玩的一件事情吗?这次我们使用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行代码写一个简单的藏头诗生成器相关推荐
- python编写程序输出诗句_Python文本处理简介:44行代码编写一个简单的隐藏诗生成器,python,入门,藏头诗...
想必最近大家家庭群里最近都会看到这么一张图: 一惊,这什么玩意儿???后来一搜会发现里面不同的诗句来自于不同的古诗,嘛,这不是很好玩的一件事情吗?这次我们使用Github的唐诗宋词dataset:ht ...
- 用python60行代码写一个简单的笔趣阁爬虫!三分一章?
前言 利用python写一个简单的笔趣阁爬虫,根据输入的小说网址爬取整个小说并保存到txt文件.爬虫用到了BeautifulSoup库的select方法 结果如图所示: 本文只用于学习爬虫 一.网页解 ...
- [教你做小游戏] 用86行代码写一个联机五子棋WebSocket后端
我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...
- 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- python藏头诗生成器_GitHub - chenjiahui/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...
Chinese_poem_generator 唐诗宋词生成器,MC胖虎,使用LSTM完成,先看几个demo: 一首藏头诗刀山火海送给大家! 胖虎学诗,会对偶,用典故,能作出边塞.田园.离别等多种风格的 ...
- python藏头诗生成器_GitHub - songyifan427/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...
Chinese_poem_generator 唐诗宋词生成器,MC胖虎,使用LSTM完成,先看几个demo: 一首藏头诗刀山火海送给大家! 胖虎学诗,会对偶,用典故,能作出边塞.田园.离别等多种风格的 ...
- python藏头诗_如何使用Python做一个藏头诗生成器?
藏头诗是可以利用Python做出来呃,具体是如何做的呃,下面随融跃小编一起了解一下! 爬取诗句 在百度搜索"我开头的诗句",可以进入到百度汉语的页面,该页面会显示所有以" ...
- python爬虫代码1000行-简单用14行代码写一个Python代理IP的爬虫
相信用别的语言只用14行是写不出来这样的效果的!而我们的Python 只需要区区的14行代码就能写出来哦! 这就是Python为什么是全球现在比较流行的语言之一了!因为简单 容易学! 比较上手! 现在 ...
最新文章
- 语义分割--Attention to Scale: Scale-aware Semantic Image Segmentation
- java neo4j rest api_Neo4j REST API使用教程
- 网络编程学习笔记(ICMPv6和IPv6套接口选项)
- sql SUBSTR
- Concurrent包下的常用并发类和普通类之间的区别
- Eclipse 各种快捷键
- 那些年,画家发明的黑科技
- js 解除网页右键菜单被禁用
- android jackson 解析json字符串,android:json解析的两个工具:Gson和Jackson的使用小样例...
- 作者:姚前(1970-),男,中国人民银行征信中心副主任、高级工程师
- android jar包冲突_用好这几个技巧,解决Maven Jar包冲突易如反掌
- 今天来了一位妹纸面试,我问她:线程池中多余的线程是如何回收的?她有点懵~...
- mac pro制作iso系统光盘
- imx8mm偶现启动内核失败问题分析报告
- 系统架构设计师论文范文
- linux jdk下载并安装
- Linux操作系统基础命令
- 根据卫星运动矢量计算轨道六根数
- Linux中的远程连接
- 小白快速学习 Kotlin 语法基础
热门文章
- C语言:小球垂直下落
- linux 红帽双机配置,Redhat Linux安装keepalived实现双机热备
- 探究 Go Profile-Guided Optimizations(PGO)
- 架构师如何应对复杂业务场景?领域建模的实战案例解析
- Stata连玉君课程笔记(一)
- Java实验报告一(完全数、一年四季、杨辉三角、path和classpath区别、next()和nextLine()区别)
- 操作系统的访问控制设计实例研究
- 《大数据架构详解》一书再版意见征集
- 信号系统|信号的分类|确定信号与随机信号 连续信号与离散信号 周期信号与非周期信号 能量信号与功率信号 奇异信号
- Azure基础:何时使用Azure 虚拟桌面(AVD)(12)