题库导入与解析:从 DOCX 到五类题型
题库导入是 Quiz App 最容易变复杂的部分。用户手里的文件格式并不统一:有纯文本,有 CSV,有 JSON,也有从 Word 里整理出来的 DOCX。项目的做法是先按扩展名分流,再把不同来源统一转换成内部的 Question 数据结构。
导入流程
文件选择
-> 按扩展名选择解析器
-> 解析为 Question[]
-> 自动挖空填空题
-> 计算内容哈希去重
-> 写入 Dexie 或上传云端
文档里明确支持五种格式:.txt、.json、.csv、.docx 和 .md。其中 DOCX 的处理最重:先用 mammoth 提取文本,再可选走 AI 格式整理,最后进入考试卷解析器。
DOCX 图片提取
一个比较实用的细节是 DOCX 配图。很多题库并不是纯文字,题干里可能嵌入图表、流程图或截图。项目在导入 DOCX 时会提取内嵌图片,并把图片作为题目字段保存。这样刷题页、背题页和题目详情都能展示图片,用户点击后还能放大查看。
五类题型
- 单选题:一个正确选项。
- 多选题:多个正确选项,独立为
multi类型。 - 填空题:支持自动挖空和多空答案。
- 判断题:统一成布尔判断。
- 简答题:以文本答案和自评为主。
多选题没有混在单选里,是一个很重要的建模决定。因为多选的判题、展示、答案顺序和部分得分策略都和单选不同,独立类型能减少后续判断里的分支。
AI 格式整理的位置
AI 整理不是强依赖,而是 DOCX 导入时的可选增强。它的作用是把格式混乱的 Word 文档归一成更容易解析的文本。开发环境可以本地直连;部署环境通过 Cloudflare Pages Function 携带环境变量调用,避免把 key 放到浏览器。
这条链路的价值是把“不可靠的输入”尽量变成“可预测的文本”,但最终仍然要依赖解析器和测试用例兜底。