WPS 实操作业自动批改
把"解压 → 立量规 → 逐份判读 → 打分 → 回写成绩表 → 出报告"这条链路标准化,
保证几十份作业的评分口径一致、可追溯、不遗漏。
核心原则
- 先判形态,后定口径。 用
detect_form.py判定本次是 Office 文档型、纯截图型还是混合型。
形态不同,判据来源完全不同:文档型看文件属性,截图型看画面内容。形态判错,后面全错。 - 先立量规,后打分。 量规未确认前不动笔;中途不改量规,必须改则回头重评。
- 客观指标靠脚本,主观质量靠阅读。 页数、公式数、字数、图片数一律以脚本统计为准。
- 扣分必须带证据。 指出第几页、哪个单元格、哪张截图违反了量规哪一条。
- 评语要具体。 禁止"表现良好""有待提高"这类空话,优点缺点都须引用作业实际内容。
- 图看不清不等于做错。 模糊图标"需人工复核"并建议重交,不按错误扣分。
- 分批保存。 每批完 5–8 人就写一次
results.json,长任务中断不丢数据。
执行流程
0. 准备环境
python "<skill>/scripts/prepare_env.py"
输出 PY=<解释器路径>,后续全部用 $PY 执行。依赖:python-docx、openpyxl、PyMuPDF、
python-pptx、Pillow,缺哪个自动装哪个。安装失败则提示用户手动安装。
1. 解压与盘点
$PY "<skill>/scripts/unzip_and_scan.py" <作业.zip> --out manifest.json
自动修复 zip 中文文件名乱码,识别「批改标准」与「成绩」文件,从文件名/目录名解析学号与姓名
并按学生归组。若输入已是目录则直接扫描。
解压后先向用户一次性汇报这三点(不要逐个问),确认后再继续:
rubric_files是否命中正确的批改标准;未命中 → 索要路径score_files是否为成绩表;没有 →$PY scripts/make_score_template.py --out <解压目录>/成绩.xlsxstudents[].confidence为low的条目(学号/姓名可能解析错)如何修正
1.5 识别作业形态
$PY "<skill>/scripts/detect_form.py" --manifest manifest.json --expect 4 --out form_report.json
--expect 填本次每人应提交的材料数量(如"4 张截图");不给时脚本按众数推断。
输出 form 字段决定后面走哪条路:
| 形态 | 判据来源 | 下一步 |
|---|---|---|
office_docs |
文件属性 | 照原流程 extract_content.py 抽取后按 stats 判分 |
image_only |
截图画面 | 先 inspect_images.py 体检,再按 references/image-homework.md 的五问清单逐张看图 |
mixed |
两者都有 | 文件部分走脚本,图片部分走图片口径 |
text_only / empty |
全文 / 无内容 | 通读文本;empty 先排查是否多嵌套了一层压缩包 |
同时看 warnings:缺交名单、身份低置信(昵称/乱码文件名)、数量异常偏多。
2. 解析评分量规
$PY "<skill>/scripts/extract_rubric.py" "<批改标准.docx>" --out rubric.json --raw rubric_raw.md
必须通读 rubric_raw.md 全文再校正 rubric.json。表格型标准脚本能自动拆出评分项;
段落型标准需手工拆。为每个评分项补一个 check 字段,写明"在作业文件里如何验证这一项"——
这是保证几十份作业口径一致的关键。
{"total": 100, "items": [{"name": "页面设置", "max": 15, "requirement": "A4、页边距 2.5cm",
"deduct": "每错一处扣 3 分", "check": "读 docx section 页边距"}],
"bonus": [], "penalty": []}
3. 批量抽取作业内容
$PY "<skill>/scripts/extract_content.py" <解压目录> --outdir _content --manifest manifest.json --render-pdf 2 --preview-images
--manifest 用于精确排除成绩表与批改标准文件(避免把学生名为「成绩统计.xlsx」的作业误排除)。
产出 _content/index.json(含每份作业的客观统计特征)与各文件 .md 快照。
先读 index.json 决定策略:多数评分项可直接用 stats 判定;只对 needs_vision: true
的 PPT、图片、扫描版 PDF 才用视觉看原图。每份作业控制在 1–3 次读取。
Excel 会额外抽一份样式明细(行高、列宽、合并区、字体字号、对齐、底纹、数字格式、边框),
排版类评分项(黑体16号、行高48磅、货币格式、所有框线……)一律以这份明细为准。
只想看数据时加 --no-styles。
形态为 image_only / mixed 时,图片部分改跑体检:
$PY "<skill>/scripts/inspect_images.py" <解压目录> --outdir _imgqc --manifest manifest.json
先看 _imgqc/image_qc.json 的清晰度分布与"疑似模糊"清单;阈值按脚本给的建议值校准一次。
重复图只作线索:同目录内重复多半是重复提交,跨目录疑似雷同只在 remark 标注待复核,
不直接扣分、不下抄袭结论。
图片作业看不清时,调用已安装的「文本识别OCR」技能做 OCR;仍无法辨识则标"需人工复核",
不凭空给分。
4. 逐人评分
按 rubric.items 逐项判定并汇总 score = Σ各项 + bonus − penalty(0 ~ total)。
每位学生产出:
{"student_id": "2023123456", "name": "张三", "score": 88,
"strengths": "标题全部使用样式,目录自动生成;表格三线表规范",
"weaknesses": "页边距未按要求设置;页眉页脚缺失;第3页图片遮挡正文",
"suggestions": "页面布局→页边距→自定义 2.5cm;插入→页眉页脚补页码;图片改为四周型环绕",
"remark": ""}
suggestions 要与 weaknesses 一一对应,并说清"在 WPS 里点哪里改"。
5. 回写成绩表
# 先看列映射与匹配情况
$PY "<skill>/scripts/write_scores.py" --xlsx "<解压目录>/成绩.xlsx" --results results.json --dry-run
# 确认无误再正式写入
$PY "<skill>/scripts/write_scores.py" --xlsx "<解压目录>/成绩.xlsx" --results results.json --report write_report.json
按学号 → 姓名精确 → 姓名包含的顺序匹配行;缺失的字段列自动新建;未匹配的学生默认追加到表尾
(--no-append 可关闭);写入前自动备份 .bak.xlsx。
务必检查 write_report.json 的 unmatched 并人工核对。
6. 生成总结报告
$PY "<skill>/scripts/make_report.py" --results results.json --out 批改报告.md --title "作业2 批改总结"
含分数分布、共性优点、共性缺点、改进建议 Top、异常名单(缺交/低分)、逐人明细表。
交付前自检
- [ ] results.json 人数 = 成绩表学生数(缺交的也要有记录,记 0 分)
- [ ] 分数均在 0–
total之间,无空值;全班平均分异常(>90 或 <50)时抽查 3–5 份复核 - [ ] 每人 strengths / weaknesses / suggestions 均为具体文本
- [ ]
unmatched已核对完毕,原表已备份 - [ ] 批改报告已生成并交给用户
资源
| 文件 | 用途 |
|---|---|
scripts/prepare_env.py |
环境自检与依赖安装,输出可用解释器 |
scripts/unzip_and_scan.py |
解压(修复中文乱码)+ 生成 manifest.json |
scripts/detect_form.py |
判定作业形态(文档型/纯截图型/混合型)+ 数量齐全性核查 |
scripts/inspect_images.py |
图片体检:清晰度、尺寸、亮度、重复图检测 |
scripts/extract_rubric.py |
从批改标准 docx 抽取评分量规 |
scripts/extract_content.py |
批量抽取各格式作业内容 |
scripts/write_scores.py |
成绩与评语回写 xlsx |
scripts/make_report.py |
生成班级批改总结报告 |
scripts/make_score_template.py |
生成标准成绩表模板 |
scripts/common.py |
公共工具(学号姓名解析、列名识别等) |
references/grading-workflow.md |
执行前必读:六步详解、评分一致性规则、边界情况处理 |
references/format-notes.md |
各格式解析能力矩阵 + Word/Excel/PPT 常见评分点与脚本判据 |
references/image-homework.md |
纯截图型作业专用:五问清单、错误分类学、给分与身份归属规则 |
assets/成绩模板.xlsx |
压缩包内无成绩表时使用 |
.doc / .wps / .xls / .et / .ppt / .dps 等旧格式无法直接解析,需请学生另存为新格式,
或用 WPS 批量转换后再批。