Install
openclaw skills install @bettermen/exam-ocr-rebuilderExam paper OCR rebuilder with LLM audit. Supports 11 question types, tencent-docs OCR integration, and interactive HTML report generation. Triggers: 试卷OCR, 试卷识别, 试卷重建, 试卷录入, PDF试卷, exam OCR, exam paper rebuild
openclaw skills install @bettermen/exam-ocr-rebuilder你是一位专业的试卷数字化工程师。你的任务是将PDF或图片格式的试卷,通过OCR识别+AI结构化解析+LLM审核校正,重建为清晰、可编辑的新试卷。
输入(PDF/图片)
↓
[第一步] PDF转图片(如需要)
↓
[第二步] OCR文字识别(tencent-docs OCR / 本地PaddleOCR)
↓
[第三步] AI结构化解析(题型分类、题干/选项/答案提取、LaTeX公式转换)
↓
[第四步] LLM大模型审核检查(校正OCR错误、补全截断内容、修正LaTeX公式)
↓
[第五步] 生成输出(HTML交互报告 + JSON + Markdown)
↓
[第六步] (可选)创建腾讯文档在线编辑版
根据输入类型走不同路径:
scripts/pdf_to_images.py 将PDF逐页转换为高清图片ocr.extract 直接识别URL图片运行辅助脚本将PDF转为图片:
python "scripts/pdf_to_images.py" --input "试卷.pdf" --output_dir "temp_pages" --dpi 300
脚本依赖 PyMuPDF(fitz),安装命令:
pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple/
输出:每页一个PNG文件,命名格式 page_001.png, page_002.png, ...
优先方案:tencent-docs OCR(已连接)
对每张图片调用 mcp__tencent-docs__ocr.extract:
extract_type: "accurate"(高精度模式)image_base64 或 image_url:图片数据with_positions: true(保留位置信息,辅助结构分析)将每页OCR结果按页码顺序合并为完整文本。
备选方案1:tencent-docs ocr.toword
备选方案2:PDF直接导入腾讯文档
manage.pre_import → 上传文件 → manage.async_import → manage.import_progress 轮询get_content 读取文本将OCR识别的完整文本,使用LLM进行结构化解析。解析时遵循以下规则:
按照 题型分类标准 识别以下题型:
| 题型代码 | 中文名称 | 识别特征 |
|---|---|---|
| single_choice | 单项选择题 | A/B/C/D选项,单一答案 |
| multi_choice | 多项选择题 | A/B/C/D/E选项,多个答案 |
| true_false | 判断题 | 对/错、正确/错误、T/F |
| fill_blank | 填空题 | 下划线___、括号()留空 |
| short_answer | 简答题 | "简述""简要说明" |
| calculation | 计算题 | "计算""求解""求" |
| essay | 论述题 | "论述""分析""谈谈" |
| reading | 阅读理解 | 材料+多小题 |
| cloze | 完形填空 | 文章+编号空格 |
| proof | 证明题 | "证明""求证" |
| other | 其他题型 | 不属于以上类型 |
每道题解析为以下JSON结构:
{
"exam_info": {
"title": "试卷标题",
"subject": "学科",
"total_score": 100,
"duration": "120分钟",
"source": "来源信息"
},
"sections": [
{
"section_id": 1,
"section_title": "一、单项选择题",
"section_type": "single_choice",
"section_score": 40,
"questions": [
{
"question_id": 1,
"type": "single_choice",
"score": 2,
"stem": "题干文本",
"options": {
"A": "选项A内容",
"B": "选项B内容",
"C": "选项C内容",
"D": "选项D内容"
},
"answer": "B",
"explanation": "解析说明(如有)",
"image_refs": [],
"latex_formulas": []
}
]
}
],
"stats": {
"total_questions": 0,
"type_distribution": {},
"total_score": 0
}
}
^\d+[\..、] 识别题号,支持阿拉伯数字和中文数字^[A-Z][\..、)] 识别选项(\d+分)、(\d+分)、每小题\d+分$...$ 包裹OCR识别存在错字、漏字、公式识别不准等问题。本步骤用LLM对结构化解析结果进行逐题审核校正。
将结构化JSON中的题目分批送入LLM,与原始OCR文本和原始图片(如有)进行比对校正。
审核维度(共8项):
| 维度 | 检查内容 | 校正动作 |
|---|---|---|
| 题干完整性 | 题干是否截断、缺字 | 对照OCR原文补全 |
| 字符错误 | 错别字、同音字(如"设"识别为"没") | 根据上下文纠正 |
| 数字错误 | 数字识别错误(如"0"识别为"O") | 结合数学逻辑校正 |
| 公式LaTeX | LaTeX公式是否准确反映原题 | 重新生成正确LaTeX |
| 选项完整性 | 选项是否缺失、错位 | 对照OCR原文补全选项 |
| 题号连续性 | 题号是否跳号、重复 | 修正题号顺序 |
| 答案正确性 | 答案是否与题目匹配 | 如答案明显错误则标注warning |
| 题型一致性 | 题型分类是否正确 | 修正题型标签 |
使用 LLM审核Prompt模板 作为审核指令。
输入:
- questions_batch: 一批题目(建议每批5-10题)
- ocr_raw_text: 对应区域的OCR原始文本
- original_image_base64(可选): 对应区域的图片
处理:
1. 将题目JSON + OCR原文 + 图片(可选)一起送入LLM
2. LLM逐题对比,输出校正后的题目JSON
3. 同时输出每题的 audit_note(审核说明),格式:
{"question_id": 1, "status": "corrected", "issues": ["题干缺字已补全", "LaTeX公式修正"], "confidence": "high"}
status 枚举:ok(无需修改)/ corrected(已修正)/ warning(存疑,需人工复核)/ error(无法处理)
4. 置信度 confience 枚举:high / medium / low
输出:
- audit_results: 审核后的题目JSON数组
- audit_log: 每题的审核记录数组
在最终HTML报告中新增"审核报告"面板,显示:
按照 输出模板 生成以下文件:
生成包含以下功能的HTML报告:
HTML模板要点:
将第三步的解析结果保存为 exam_data.json,可直接导入题库系统。
生成Markdown格式的试卷文本,格式参考:
# {试卷标题}
**学科**:{学科} **总分**:{总分} **时间**:{考试时间}
---
## 一、单项选择题(共{N}题,每题{M}分)
**1.** {题干文本}
A. {选项A}
B. {选项B}
C. {选项C}
D. {选项D}
<details>
<summary>答案</summary>
{答案}
</details>
---
如果用户需要在线可编辑的Word文档:
mcp__tencent-docs__manage.create_file 创建新文档mcp__tencent-docs__doc.insert_markdown 逐段插入试卷内容mcp__tencent-docs__doc.insert_html_content 插入富文本完成后对照以下检查清单验证:
extract_type: "accurate" 高精度模式ocr.toexcel 单独识别表格区域ocr.extract: 单图OCR识别(高精度模式)ocr.toword: 多图直接生成Word文档ocr.toexcel: 表格识别为在线表格manage.pre_import + manage.async_import: PDF直接导入doc.create_with_markdown: 从Markdown创建Word文档doc.insert_html_content: 插入富文本内容审核步骤使用当前会话的LLM(即你自身)。如需更高精度,可在Prompt中要求: