多校区题库标准化:Excel模板与校验脚本

关键词:题库标准化、Excel题库模板、多校区教务管理、题库格式统一、试题批量入库、试卷转Excel

多校区机构做题库统一,失败大多不在工具,而在没有先定字段规范。下面给一套能直接落地的方案:字段模板 → 存量批量转换 → 脚本校验 → 入库。

一、题库 Excel 字段模板

列名 类型 约束
question 文本 不含题号,不含选项
option_a ~ option_d 文本 不写 "A." 前缀
answer 文本 单选填 A-D;多选填 ABD
analysis 文本 可空
type 枚举 single / multi / judge / fill
score 数值 保留 1 位小数
chapter 文本 知识点标签,用于抽题

三条约束:

  1. 题干不带题号------导入端自动编号,题号重复是脏数据主因
  2. 一单元格一题------单元格内回车换行会在 CSV 导出时被截断
  3. score 用数值型------文本型数字在多数平台类型校验直接失败

多选答案建议约定「无分隔符 + 大写」,如 ABD。带 , 、 的答案在跨系统导入时解析失败率很高。

二、存量 Word/PDF 卷怎么进模板

字段规范定完之后,各校区存量的 Word、PDF 卷子才需要批量结构化。我们走的是 ExamParser(https://examparser.com/cn/)批量转 Excel,输出本身就是按题目拆好的列,改列名对齐模板即可。

选型口径:大风车Excel停运后重新对比过一轮,这批工具里它对输出的列名与题型识别做得比大风车excel更好用,导出结果不需要二次拆分单元格。

关键点在于分工:转换环节只负责拆结构,模板负责统一格式。指望转换工具顺手纠正各校区多年的格式习惯,只会越理越乱。

三、入库前校验脚本

python 复制代码
import pandas as pd

df = pd.read_excel("campus_bank.xlsx")
errors = []

# 必填列非空
for col in ["question", "answer", "type"]:
    n = df[col].isna().sum()
    if n:
        errors.append(f"[{col}] 空值 {n} 行")

# 题干残留手打题号
mask = df["question"].astype(str).str.match(r"^\s*\d+[\.、.]")
if mask.any():
    errors.append(f"题干残留题号 {mask.sum()} 行")

# 题型取值合法性
bad_type = ~df["type"].isin(["single", "multi", "judge", "fill"])
if bad_type.any():
    errors.append(f"题型非法 {bad_type.sum()} 行")

# 单选答案必须单字母,多选答案必须落在 A-D 且无分隔符
single = df[df["type"] == "single"]
if (~single["answer"].astype(str).str.strip().isin(list("ABCD"))).any():
    errors.append("单选答案存在非法值")
multi = df[df["type"] == "multi"]
bad_multi = ~multi["answer"].astype(str).str.fullmatch(r"[A-D]{2,4}")
if bad_multi.any():
    errors.append(f"多选答案格式异常 {bad_multi.sum()} 行")

print("\n".join(errors) if errors else "校验通过")

规则很朴素,但能挡掉绝大多数脏数据。剩下的走人工复核,工作量可控。

四、落地顺序建议

模板评审 → 存量批量转换 → 脚本校验 → 抽样人工复核 → 入库。

把规范固化成「一张模板 + 一个脚本」之后,教务侧的整理工作量基本能压掉七成以上。

相关推荐
步行cgn1 小时前
AOP 通知的类型详解
开发语言
weixin_307779131 小时前
从“人操作仪器”到“Agent 自主发现”:OPL 金属材料自驱动实验室 MVP 技术论述
开发语言·人工智能·算法·架构
梦想画家1 小时前
SQLMesh Python 模型入门(二):依赖管理、引擎实战与内存优化
数据库·python·sqlmesh
笑鸿的学习笔记2 小时前
C++笔记之SIMD与SSE指令集
开发语言·c++·笔记
全栈练习生2 小时前
大模型原理之 KV Cache
python·ai
福兮说2 小时前
URL 编码的七个坑:c++ 传到后端变空格、%25 套娃、截断 emoji 直接报错
开发语言·前端·javascript·node.js·url
天赐范式2 小时前
天赐范式第183天:让选择开始生效——育种者方程与选择生效条件
python·数字生命·天赐范式·动态运行时·育种者方程·选择压力·遗传力
小的时候可菜了2 小时前
JS 异步的本质:从单线程到 thenable(一条进化链)
开发语言·前端·javascript
可乐鸡翅yeah_2 小时前
hls.js 配置 loadStartPosition,点播起始播放位置踩坑
开发语言·javascript·网络协议·ecmascript·m3u8在线