网上有一位大神收集了好几万条古诗,我们通过这个来生成藏头诗
文件下载链接(Github):点击下载
然后打开文件夹里面会有很多.json文件,然后我们需要用Python提取我们想要的古诗并且写入到文件中
步骤:
- 遍历所有子文件夹,然后将.json文件路径保存到数组里
- 打开并读取.json文件
- 获取古诗每一个诗句
- 检测古诗是不是五言或七言
- 将需要的古诗写入文件
代码如下:
import os import json # 遍历所有子文件夹下包含文件后缀的函数 def findAllFilesWithSpecifiedSuffix(target_dir, target_suffix="txt"): find_res = [] target_suffix_dot = "." + target_suffix walk_generator = os.walk(target_dir) for root_path, dirs, files in walk_generator: if len(files) < 1: continue for file in files: file_name, suffix_name = os.path.splitext(file) if suffix_name == target_suffix_dot: find_res.append(os.path.join(root_path, file)) return find_res # 调用函数 fa=findAllFilesWithSpecifiedSuffix("C:/Users/shenyutong/Desktop/chinese-poetry-master","json") # 打开要写入的文件,这里分为两种类型,五言和七言,以便于生成特定长度的藏头诗 f111 = open('poem_5.txt', 'w', encoding = "utf-8") f11 = open('poem_7.txt', 'w', encoding = "utf-8") cnt=0 for i in fa: f = open(i,'r',encoding='utf-8') # json.load() 这种方法是解析一个文件中的数据 m = json.load(f) for j in m: # 变量kkk是用于检测该条json数据是否包含古诗,看一下古诗.json文件的结构可以得知 kkk=None try: kkk=j['content'] except: try: kkk=j['paragraphs'] except: pass if kkk!=None: cnt+=1 if cnt%10000==0: print("正在获取古诗... 计数:",cnt) for each_poem in kkk: '''判断古诗是七言还是五言,这里有些复杂,判断过程如下: 首先判断 古诗是否有两段(列如XXXXX,XXXXX。)并且两半字数是否相等(列如XXXXX,XXXXX。就是相等的,XXX,XXXXX。就是不相等的) 然后判断 古诗是五言(含符号12字)还是七言(含符号16字) 最后分别写入到指定的文件''' if len(each_poem.split(",")) == 2 and len(each_poem.split(",")[0]) == len( each_poem.split(",")[1].replace("。", "")): if len(each_poem) == 12: f111.write("n") f111.write(each_poem.split(",")[0] + "n" + each_poem.split(",")[1].replace("。", "")) elif len(each_poem) == 16: f11.write("n") f11.write(each_poem.split(",")[0] + "n" + each_poem.split(",")[1].replace("。", "")) f111.close() f11.close()生成藏头诗
生成过程:
- 遍历输入字符(i)
- 遍历古诗列表(j)
- 判断古诗的第一个(如果是藏尾的话就是最后一个)与i是否相等
- 如果相等则输出该句加上标点并break
代码如下:
a = input("请输入您想生成的藏头诗字数(五言/七言): ") while not a in ['五言', '七言']: print("输入有误,请重新输入") a = input("请输入您想生成的藏头诗字数(五言/七言): ") b = input("请输入您想生成的类别(藏头/藏尾): ") while not b in ['藏头', '藏尾']: print("输入有误,请重新输入") b = input("请输入您想生成的藏头诗字数(藏头/藏尾): ") c = input("请输入您想藏头的话: ") while not c: print("输入有误,请重新输入") c = input("请输入您想生成的藏头诗字数(藏头/藏尾): ") if a == "五言": f = open("poem_5.txt", "r", encoding = "utf-8").read().split("n") else: f = open("poem_7.txt", "r", encoding = "utf-8").read().split("n") output_d = 0 for i in c: for j in f: if b == "藏头": if j[0] == i: output_d += 1 print(j, end = "") if output_d % 2 == 0: print("。") else: print(",") break else: if j[-1] == i: output_d += 1 print(j, end = "") if output_d % 2 == 0: print("。") else: print(",") break
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)