去年冬天,刷题我在一个考研群里看到有人发截图,软件某刷题App的自己“自定义题库”功能里,整整齐齐排列着三百多道《数学分析》的导入题目,每道题下面还带着他手写的题库解题思路。群里瞬间炸了锅,刷题十几个人追问怎么导入的软件。那个群友只回了一句:“自己写的自己脚本,把PDF里的导入题扒出来,再按格式塞进去。题库”
这件事让我意识到,刷题刷题软件的软件核心矛盾一直没变过:题库是别人的,错题是自己自己的。市面上的导入App要么题库陈旧,要么广告满天飞,题库要么你做完一套题想回头复习,发现错题本里混着一堆重复的、低质量的、甚至答案有误的题目。自己导入题库,本质上是一次“数据自救”。
我后来花了两个周末,把某主流刷题软件的导入机制摸了一遍。它支持三种格式:Excel、CSV,以及一个自定义的JSON模板。Excel最直观,但坑也最多。比如题干里如果包含换行符,导入后会被截断;选项里的“A.”“B.”必须单独占一列,不能挤在题干里。我第一版导入了两百道政治题,结果一半的选项串了行,气得我直接删库重来。
JSON模板灵活得多,但需要你懂一点数据结构。它把每道题拆成question、options、answer、explanation四个字段,其中options是个数组。我拿Python写了个转换脚本,把从某题库网站爬下来的HTML表格直接映射成JSON。脚本运行了四十分钟,生成了八百多道题,导入成功的那一刻,比做完一套卷子还爽。
不过,自己导入题库有个隐蔽的成本:校对。机器提取的题目,公式容易乱码,图片会丢失,答案可能错位。我导过一道线性代数题,题干里的矩阵被转成了一串乱码,答案却显示“A”。后来我养成了一个习惯:每导入五十道题,就随机抽十道做一遍。这个笨办法救了我好几次。
另一个发现是,不同App对导入题库的“态度”不一样。有的软件把自定义题库藏在三级菜单里,导入后不能同步到云端,换手机就没了。有的则开放API,允许你直接推送题目,甚至能生成错题热力图。我最后选了一个小众App,就因为它支持Markdown格式的题干,数学公式用LaTeX写,渲染出来跟教科书一样。
有人觉得折腾这些不值,有那时间不如多刷两套现成的题。但我的体验恰恰相反:当你亲手把散落在PDF、网页、笔记里的题目整理成一个结构化的题库,你对知识点的理解会深一层。因为你在决定“这道题要不要收录”的时候,已经在筛选和归类了。这个过程本身,就是一次主动复习。
现在我的题库里有四千多道题,横跨三门专业课。每次打开App,看到那个“我的题库”标签,都有一种奇怪的踏实感——这些题是我自己攒的,每一道都知道它从哪来,为什么在这。刷题软件终究只是个容器,往里装什么,还是得自己说了算。