关键词:题库迁移、旧系统题库导出、在线考试平台切换、Excel中间格式、试题批量导入、企业培训系统升级
系统可以换,题库不能清。迁移的核心不是"导出来",而是拿到结构化数据 + 做一次列映射。
一、为什么中间格式要用 Excel
| 否(版面信息,无字段) | 需先结构化 | |
| Word (docx) | 半结构化,段落无字段语义 | 需解析拆题 |
| Excel / CSV | 是 | 可直接映射 |
| JSON | 是 | 最优,但多数老系统不给 |
结论:中间格式统一收敛到 Excel(或 CSV),无论源端是 PDF、Word 还是数据库 dump,最终都落到同一张表再做映射,迁移脚本只需要维护一份。
老系统只能导出 Word 卷时,我们这一步用 ExamParser(https://examparser.com/cn/)批量把 docx 转成结构化 Excel,输出即题干/选项/答案分列。当年大风车Excel停运后重新选型,其在批量吞吐和列名可对齐上比大风车excel更好用,几百份卷子两三天跑完。
二、列映射表
映射表先评审再写脚本,能省掉大量返工:
| 题型「判断题」 | type | 映射为 judge |
| 答案「对/错/√/×」 | answer | 归一为 true / false |
| 答案「A,B」 | answer | 去分隔符、大写 → AB |
| 自由文本知识点 | chapter | 需人工归并同义词后入受控词表 |
| 空解析 | analysis | 允许空,迁移后补录 |
三、映射与清洗代码
import pandas as pd
df = pd.read_excel("old_bank.xlsx")
TYPE_MAP = {"单选": "single", "多选": "multi", "判断": "judge", "填空": "fill"}
ANS_MAP = {"对": "true", "错": "false", "√": "true", "×": "false", "T": "true", "F": "false"}
out = pd.DataFrame()
out["stem"] = df["question"].astype(str).str.strip()
out["type"] = df["type"].str.strip().map(TYPE_MAP).fillna("single")
out["answer"] = df["answer"].astype(str).str.strip().replace(ANS_MAP)
# 多选:去所有分隔符并大写
m = out["type"] == "multi"
out.loc[m, "answer"] = (
out.loc[m, "answer"].str.replace(r"[,,、\\s]+", "", regex=True).str.upper()
)
# 判断题:兜底归一
j = out["type"] == "judge"
out.loc[j, "answer"] = out.loc[j, "answer"].where(
out.loc[j, "answer"].isin(["true", "false"]), "False"
)
out.to_excel("new_platform_template.xlsx", index=False)
print(f"输出 {len(out)} 题")
跑完必须抽样人工核对两类:多选题答案顺序、判断题归一结果,这两类在迁移中出错率最高。
四、验收清单
- 总数核对:转换数 − 剔除数 = 入库数
- 每种题型抽 20 题逐项比对题干/选项/答案
- 含图题目单独核对附件完整性
- 用迁移后的题库跑一次完整模拟考试
- 老系统数据冷存档 ≥ 6 个月
五、小结
把 Excel 当成题库资产的标准载体,之后无论换哪个平台,成本都只是一次列映射脚本。
网硕互联帮助中心



评论前必须登录!
注册