前言
挖空记忆是一种常见的默写和背诵方法,可用于训练知识检索和提取的能力,也能检测自己对需要记忆的内容是否完全掌握,减少对书本的依赖。不仅可以用于古诗词的前后句回想,也可以“涂黑”一句话中的关键词,尝试上下文联想。
但这种填空题的制作实操比较麻烦,如果想对一句话实现几种不同的挖空,比如古诗中的前后句记忆,既想看见上句接下句,又想根据下句考察上一句有没有记牢,那么就要分开制作两次。停顿更多、篇幅更长的就更不用想了。
年纪大了总觉得知识记不住,主流的卡片式记忆软件也用的不太顺手,就想到了用代码帮我制作默写本的方式。只需要提供格式化的原文,自定义挖空规则,电脑自动帮我生成一份试卷,自查自抽自检,接下来记不记得住就看自己了。
背诵材料原文
这里示范一下古诗词填空默写。
原文是用markdown写的,格式如下。
左边是编辑视图,右边是阅读视图
生成的默写本
输出到txt文档
随机挖空
再生成一次,挖空不一样
代码
# version 3.9.5
import os
import math
import random
filePath = "corpus.txt"
with open(filePath,"r",encoding="UTF-8") as f:
lines = f.readlines()
print("材料读取成功,分析中……")
blank = "_________"
fileName = os.path.splitext(filePath)[0]
dictation_output = "基于"+fileName+"材料制作的默写本:"+"\n\n"
for line in lines:
line = line.strip("\n")
# 筛选带序号的行,提取句子并挖空
if line[1] ==".":
# 获得序号
index = line[0]+". "
# 获取分句列表,转化成索引
sentence = line.split("**")[1]
sub_lists = sentence.split(",")
num_list = [i for i,t in enumerate(sub_lists)]
# 抽取半数句子挖空(向上舍入),随机无放回取样
num_of_choices = math.ceil(len(num_list)/2)
blank_list = random.sample(num_list,k=num_of_choices)
# 把列表中抽到的部分更换为空格,合并句子并新增到末尾
new_list = [blank if i in blank_list else sub_lists[i] for i in range(len(sub_lists))]
new_sentence = ",".join(new_list)
if new_sentence[-1] != "。": # 保证句子末尾有句号
new_sentence+="。"
dictation_output += index + new_sentence + "\n"
else:
pass
with open("dictation_file.txt","w") as f:
f.write(dictation_output)
print("默写本制作完成!")
长文挖空也是可以做到的,给抽样设置一下间隔,不要连续挖在一起就行。