小学作文批改与升格
一次输入,两样产物:先在学生的原文上批改(红笔落在原稿照片上,或把原文排进方格稿纸),再在同一份原文上改出一篇语句通顺、不少于 400 字的优秀作文。
批改与升格共用一份 result.json,共用同一套单元标准,所以"病"(标出的问题)和"药"(改出的作文)能逐段对得上——这是本技能最重要的设计。
> 本技能由 g6a-unit-essay-grader(批改)与 essay-upgrade-primary(升格)合并而成,两个旧技能已归档。
何时使用
批改类:老师上传/粘贴学生作文,说"帮我批改 / 打个分 / 写评语 / 在我上传的图片上改 / 红笔批改的样子,一人一张 A4 方便打印"。
升格类:老师说"改成一篇通顺的优秀作文 / 升格 / 重写一篇,别改他的意思 / 不少于 400 字 / 每人一份放一个 Word 里"。
两样一起要(最常见):老师说"我们班第一单元《变形记》收上来了,帮我批改一下,每人再生成一篇优秀作文"。
产出物
| 产物 | 内容 | 排布 |
|---|---|---|
| 红笔批改页(方格稿纸路线) | 学生原文(含错别字)排进 20×N 方格稿纸 → 叠加红笔订正、红波浪线好句、蓝色段旁建议;页眉"红笔批改:第N篇 姓名《题目》·总分 X";右上角总分徽章 + 内容/结构/语言/卷面四维分;底部红框"老师总评" | 一个学生一张 A4(300dpi PNG + 全班合集 PDF) |
| 红笔批改页(原稿照片路线) | 保留学生手写原稿照片本身,红笔直接落在孩子写的字上(笔迹、原有涂改都在);多页照片 + 批注对照面板 + 好句摘录 + 总评整合成一张 A4 | 一个学生一张 A4(PNG + PDF) |
| 优秀作文集(主交付) | 在原文上改出的新作文:改掉全部错误 + 把段旁建议真正写出来 + 语言升格;保留原意、语句通顺、不少于 400 字 | 一个 Word,第一行题目(黑体三号居中)、第二行姓名(楷体小四居中)、第三行起正文(楷体小四、1.5 倍行距、首行缩进 2 字符),一人一页 |
| 封面页 + 目录页(可选) | 文集名、班级、篇数、日期、姓名列表 | 加 --cover 时出现在作文集最前,第一位学生自动另起一页 |
| 原文/升格对照版(可选) | 每段"原文(灰)/升格(黑)"上下排 | 加 --compare 时另出一个 ..._对照版.docx,讲评课用 |
两条批改页路线怎么选
| 方格稿纸路线 | 原稿照片路线 | |
|---|---|---|
| 输入 | 转写后的文本(result.json) |
学生手写原稿的照片(另需 photo_spec.json) |
| 观感 | 统一、干净、字号一致 | 原汁原味,保留学生笔迹与已有涂改 |
| 页码 | 严格一人一页 | 多页照片整合到一张 A4 |
| 什么时候用 | 只有文字没有照片;或作文较长要统一排版 | 老师上传了照片且要求"在原图上改"(默认优先) |
| 脚本 | make_grid_pages.py |
make_photo_pages.py |
核心规则
批改的四条
- 原文照录,不能顺手改好——
paragraphs[].text是学生原文(含错别字),红笔订正才有对象,它同时也是升格稿的底本。 - 同一把尺子——四维分(内容 40 / 结构 20 / 语言 30 / 卷面 10)同一批作文同口径,分数差距要能在评语里说清依据。评语规范见
grading-rubric-6a.md。 - 评语正面管教——先具体肯定(指出哪一句好、好在哪),再给 2~4 条可操作的改进建议,最后鼓励收尾,120~160 字。
- 段旁建议必须可照着改——指向这一段的具体位置,不写"内容不具体""要详细点"。
升格的三条铁律(冲突时按此优先级)
① 保留原意 → ② 语句通顺 → ③ 不少于 400 字。
最常翻车的地方:为了凑字数擅自加了新人物、新事件或新结尾。唯一判断标准:加进去的每一句,都必须是原文那个场景里本来就该有的东西,只是学生没写出来。
工作流程
Step 0 · 环境准备(首次使用跑一次)
python <技能目录>/scripts/setup_env.py
自动找 Python、建虚拟环境、装 Pillow + python-docx + numpy,打印一行 VENV_PYTHON=<路径>。下文用它打印的路径作为 <venv-python>。
Step 1 · 定位学段与单元
读 references/unit-prompts-6a.md,找到本单元那一节,记住批改关注点和升格时往哪儿使劲。
其他年级:字数下限按学段调(三四年级 300、五六年级 400、初一 500),单元要求按文体套用相近单元。
单元不明时按原文内容判断文体(想象/记事/写人/应用文)。
Step 2 · 转写原文(逐字照录)
- 照片 / PDF / 文字都可以。手写照片要逐字读下来,包括学生写错的字、自己划掉的涂改痕迹。
- 必须照录,这是批改与升格的共同底本。
- 看不清的字放大局部再看;仍不确定的用
□占位并明确告诉老师是哪一处,不要猜。 - 分段落记录,段数就是后面升格稿的段数。
Step 3 · 打分
按 grading-rubric-6a.md 的四维量表给分(内容 40 / 结构 20 / 语言 30 / 卷面 10),总分 = 四项之和;写 total、scores 与 comment(老师总评)。
Step 4 · 标定记号(写进 paragraphs)
| 记号 | 用于 | 要求 |
|---|---|---|
good |
值得学习的句子 | 红波浪线 + 句尾小标签("好句·想象""好句·动作""好句·立意"…) |
fix |
错别字、标点错、用词不当、语序不当 | 给出 right(正确写法) |
del |
多余的字词、句子 | 只给 start/end |
tip |
每段一条段旁建议 | 15~45 字,指向具体位置 |
索引规则最容易错:从 0 开始、闭区间、每个汉字/标点/数字各计 1 位、相对本段。写完用 text[start] 自查。详见 references/data-schema.md。
Step 5 · 选批改页路线
- 老师上传了手写原稿照片 → 走原稿照片路线(默认)。先用
scripts/detect_grid.py量出稿纸栅格(x0 / cw / rows),写photo_spec.json。
落笔前必做:放大 6~10 倍核对学生自己已有的涂改(划掉的字、上方补的正字),不要重复标注,否则页面会花。 - 只有文字 → 走方格稿纸路线,不需要额外准备。
Step 6—8 · 升格三步走(在原文上改)
- 先改通 —— 逐句过原文,把批改标出的每一处(错别字、病句、标点、语序、啰嗦、笼统词)都换成正确写法。做完这一步原文不应再有任何语病,字数基本不变。
- 再写实 —— 用
upgrade-standard.md的10 种手法(环境衬托、动作拆解、神态显影、心理独白、对话补全、感官开闸、比喻拟人、细节聚焦、句式调节、首尾呼应)把笼统处写实。先用动作拆解和感官开闸。 - 后润色 —— 理顺拗口句、换掉重复词、长短句交替、结尾回扣原文立意;然后做越界自查 5 问。
红线:不加人物、不加事件、不改结局立意、不打乱段落顺序、不套范文腔、不用超龄词(氤氲、岁月静好)、不为凑字数注水。
Step 9 · 字数把关
目标 ≥ 400 字(含标点、不含空白)。不够时按顺序加:1—4 号手法逐段各用一次 → 5—7 号手法写重点段 → 8 号手法放大一个物件。
加完仍不够,如实告诉老师原稿太单薄,并指出建议学生自己补写哪一处——不要硬编。
若扩写让字数涨了 2 倍以上,多半已加情节,回头查红线。
Step 10 · 写数据
按 references/data-schema.md 写 result.json:meta + 每位学生的 paragraphs(原文 + 记号)、rewrite.paragraphs(升格稿)、notes(改动说明)。
照片路线另写 photo_spec.json(见 references/photo-spec.md)。
特别注意:paragraphs 与 rewrite.paragraphs 的元素个数要一致;原卷未署名时 name 写 (姓名待填),并提醒老师补。
Step 11 · 一键出片
# 两样一起出(照片路线批改页 + 优秀作文集)
<venv-python> <技能目录>/scripts/make_all.py result.json <输出目录> \
--photo-spec photo_spec.json --cover --compare
# 只有文字时(方格稿纸路线)
<venv-python> <技能目录>/scripts/make_all.py result.json <输出目录> --cover --compare
make_all.py 会依次跑批改页与作文集,最后列出全部产物。也可单跑某个脚本:
| 脚本 | 用途 |
|---|---|
make_grid_pages.py result.json <目录> |
方格稿纸批改页 PNG + 合集 PDF |
make_photo_pages.py photo_spec.json <目录> |
原稿照片红笔标注 + A4 整合页 |
make_upgrade_docx.py result.json [out.docx] |
优秀作文集(--cover / --compare / --min-words / --strict) |
detect_grid.py 照片.png --json geo.json |
量出手写稿纸的栅格坐标 |
作文集脚本会逐篇打印字数并核对:不足 400 字给出"还差 X 字"的可执行提示;段落数与原文不一致也会告警。加 --strict 时不达标返回非 0(方便自动化重试)。
Step 12 · 交付
用 present_files 交付,并在回复里说清四件事:
1. 分数与维度(批改);
2. 每人原文字数 → 升格字数及达标情况;
3. 每篇加了什么(要点式,对应 notes),让老师能照着给学生讲;
4. 需要老师确认的地方(未署名的姓名、看不清的字、原稿太短无法达标的)。
文件清单
| 文件 | 作用 |
|---|---|
references/grading-rubric-6a.md |
批改标准:四维评分量表、四种批改记号规范、好句判定、六年级常见失分问题库、评语规范 |
references/upgrade-standard.md |
升格标准:三条铁律、三步走、10 种扩写手法(含改前改后对照)、7 条红线、越界自查 5 问、字数不够怎么办、年级适配、交付前 8 项自检 |
references/unit-prompts-6a.md |
六上八个单元:习作要求 + 批改关注点 + 升格时往哪儿使劲 + 常见问题 |
references/data-schema.md |
result.json 统一结构、索引规则、四种记号、升格稿写法、产物命名(写数据前必读) |
references/photo-spec.md |
photo_spec.json 结构、栅格怎么量、四种红笔记号、A4 版式(照片路线必读) |
scripts/setup_env.py |
首次使用先跑:建虚拟环境 + 装依赖 + 自检 |
scripts/make_all.py |
一键出片:批改页 + 优秀作文集 |
scripts/make_grid_pages.py |
方格稿纸批改页 PNG + 合集 PDF |
scripts/make_photo_pages.py |
原稿照片红笔标注 + A4 整合页 |
scripts/make_upgrade_docx.py |
优秀作文集 Word(一人一页)+ 可选封面目录 / 对照版 / 字数自查 |
scripts/detect_grid.py |
自动识别手写稿纸照片的栅格坐标 |
scripts/demo/sample_result.json |
样例数据(2 位虚构学生,含记号与升格稿),一键跑通全流程 |
常见问题处置
| 情况 | 怎么做 |
|---|---|
| 原稿只有 150 字 | 靠"不添加情节"最多扩到 300 字左右。如实告知老师并建议学生补写哪一处,不要硬编 |
| 原文有明显跑题或立意不明 | 不要替学生改立意。按原文实际立意升格,交付时提示老师"这篇的中心落在 X 上,与单元要求略有距离" |
| 原文写成三段式大段 | 可按内容分层(不改顺序、不换素材),并在 notes 里说明"这一段按动作顺序分成了两层" |
| 原卷未署名 | name 写 (姓名待填),交付时明确提醒 |
| 应用文(倡议书等) | 保住格式(标题居中、称呼顶格、署名日期),只把建议写具体,不新增条目 |
| 手写照片分辨率低 | 先跑 detect_grid.py 量栅格,别用肉眼估坐标;落笔前放大核对学生已有涂改 |
| 照片超过 4 页 | 改用方格稿纸路线,或把照片分页输出(两页并排会让字太小) |
| 一次要处理整班 40 篇 | 逐篇按同一把尺子做;paragraphs 与 rewrite 都写全,最后一次性出片 |
| 打印 | 选 A4、100% 比例,不要勾"适应页面",否则方格会变形 |