错题学情分析与练习生成
按以下五个步骤顺序执行,任何一步未完成不得跳到下一步。
步骤 1:输入识别与解析
先判断用户输入属于哪种类型,然后按对应方式提取题目内容。禁止在未读取到实际题目内容前开始写报告。
| 输入类型 | 判定依据 | 处理方式 | 输出形式 |
|---|---|---|---|
| 粘贴的图片 | 对话中直接出现 image 附件 | 直接视觉阅读图片内容,逐题转录题干、选项、填空、图示要素与学生作答痕迹 | 题目文本清单 |
| .pdf 文件 | 先用 pymupdf 提取文本层;若文本大量缺字/乱码(浏览器打印型 PDF 常见),必须将每页渲染为 PNG(约 140dpi)后用视觉逐页核对补全。命令示例见 references/analysis-framework.md 附录 | 题目文本清单(含图示描述) | |
| Word(.docx/.doc) | .docx/.doc 文件 | .docx 用 python-docx 读取正文与表格;.doc 提示用户另存为 .docx 或 PDF。文档中内嵌图片逐张导出后视觉阅读 | 题目文本清单 |
| HTML | .html/.htm 文件 | 直接读取,提取正文文本;<img> 引用的本地图片逐张视觉阅读 |
题目文本清单 |
| 纯文本 | 用户直接粘贴文字 | 按题号切分整理 | 题目文本清单 |
无法识别或不受支持时的处理(必须原样告知用户,不得编造题目):
- 文件不存在/路径错误 → 回复"未找到该文件",请用户重新上传或确认路径;
- 格式不受支持(如 .doc、加密 PDF、损坏文件)→ 说明具体原因,给出 2 种替代方案(转存为 PDF/图片、重新截图);
- 图片模糊、字段无法辨认 → 指出无法辨认的具体题号与位置,请求重拍或补充文字,只处理能确认的部分;
- PDF 文本层符号丢失 → 必须用页面渲染图视觉核对,不得凭猜测补全。
复杂图示的高清放大核对(实测踩坑后新增,必须执行):140dpi 整页渲染常看不清力臂字母标注、图线序号、几何比例、长度刻度等细节,而它们直接决定答案。对关键图示必须用 300dpi+clip 局部放大重读后再下结论,例如:
python -c "import pymupdf; doc=pymupdf.open('错题.pdf'); r=doc[3].rect; clip=pymupdf.Rect(r.x0,r.y0+r.height*0.0,r.x1,r.y0+r.height*0.16); doc[3].get_pixmap(dpi=300,clip=clip).save('crop.png')"
存疑答案的检索核对(实测验证有效):若某题因图示歧义(支点/重心位置认反、几何比例读不出)导致答案无法唯一确定,先用 WebSearch 检索题干关键句(如 "为了不使这根铁棒的B端下沉" "OA=AC" 600N)核对标准答案与解析;检索到则按标准答案修正图形读法,检索不到则在解析中明确写出"依据的图形读法",不得静默猜测。
混合专题命名:错题跨多个章节时,文件名中的专题用组合名(如"杠杆与滑轮"),报告内的考点分布表按章节分组统计,并在报告开头说明各章节占比。
步骤 2:错题结构化
把提取内容整理为结构化清单(内部使用,不必展示给用户):
每题记录:题号 | 题型(选择/填空/作图/解答)| 题干全文 | 图示要素(几何关系、标注、角度、数值)| 来源(课时/章节,若有)| 学生作答痕迹(若有)。
同时建立知识点归属(如物理按教材章节、数学按专题),后续报告按此分组。
步骤 3:生成四份 HTML
按 references/analysis-framework.md 生成学情分析报告,按 references/practice-design.md 生成两套练习,所有文件严格遵守 references/html-style-guide.md 的样式与 SVG 规范。
文件命名(保存到当前工作区根目录):
- 学情分析报告-{学生名}-{专题}-{YYYYMMDD}.html
- 巩固练习-{学生名}-{专题}-{YYYYMMDD}.html
- 变式训练-{学生名}-{专题}-{YYYYMMDD}.html
- 三合一-{学生名}-{专题}-{YYYYMMDD}.html(前三份的合并版,Tab 切换)
学生名未知时用 {学科}错题 代替;专题未知时从错题内容推断(如"杠杆""一元二次方程")。
分行排版(硬性,实测用户反馈后新增):易错提示、参考答案与解析、逐题解析卡的多空答案中,凡是逐项列举的内容((1)(2)(3) 多空答案、多个易错要点),每一项必须独占一行——用 <br> 分行或每项独立 <p>,禁止全部挤在同一段落里。多空答案按空号竖排(如 (1) was told(被动)<br>(2) proud(feel+形容词)),易错提示按要点竖排。报告"逐题解析"中完形/首字母/语法填空等 5 空以上的参考答案同样按空号分行,避免一长串数字挤成一行难以对照。
列举序号连贯(硬性,实测用户反馈后新增):易错提示/解题关键/易错点的列举项必须用连贯的列表序号 (1)(2)(3)… 从头编号;需要指明对应原题空号/小题号时,写在句子内部用"第(n)空/第(n)题"表述(如 (2) 第(7)空修饰动词误用 good),禁止直接把原题空号当列表序号(如列表只有 3 项却标成 (4)(5)(7),或只有一项却标 (8)),否则序号看起来断档。每个列表第一项也应另起一行,不要与"易错提示:"等标签同行。
四份文件的内容要求:
-
学情分析报告(1 份):
- 顶部 KPI 概览卡(错题总数、薄弱类别数、课时/章节覆盖数等);
- 考点分布与错因统计表(错因类型、涉及题号、占比、性质);
- 逐题解析卡:题干重现 → 参考答案 → 解题关键 → 易错点;
- 错因诊断:从知识点掌握(哪个模块系统性薄弱)、解题思路(方法性缺陷,如抓不住不变量)、学习习惯(审题偏差、步骤遗漏、计算失误)三个维度归纳;
- 复习行动清单(可执行的 3~5 条)+ 给家长/学生的一段反馈。 -
巩固练习(1 份):与原错题同型同难度,逐题对标(每题标注"对标原错题 N"),每题必含:
- 题干(配图,见下);
- 考查重点(蓝色信息框);
- 易错提示(红色警示框,针对原错题暴露的具体错因);
- 参考答案与解析(<details>折叠,先做后看)。 -
变式训练(1 份):换情景不换方法,在巩固练习基础上升级:改变情景载体(生活场景)、改变设问方向(正向↔逆向)、改变已知与所求、或镜像对照(如"杆不动力转向"改为"力不转杆转动")。题量为原错题的 50%~100%,且必须覆盖报告中列出的每一个薄弱类别;每题同样必含考查重点、易错提示、参考答案三要素,并注明"变式自原错题 N,变化点:××"。变式题若为计算题,数值必须重新验证,不得沿用原题答案的"惯性"。
-
三合一合并版(1 份,在前三份写完后构建):把前三份的
<body>正文各自包进<div class="page" id="pgN">合并为一个文件,顶部用 sticky Tab 导航切换(学情分析 / 巩固练习 / 变式训练)。构建要点:
- 用脚本从三份成品文件中提取正文拼接(不要手抄,避免内容漂移);
- 样式以报告的<style>为基础,练习页的差异化规则(绿主题 header/h2/tag、表格全边框居中)用.pg作用域前缀覆盖(如.pg header{background:#0F6E56}),禁止直接并排两套全局样式(后写的会覆盖前写的);
- 切换 JS 内联且极简(classList.toggle即可),零外部依赖;
- 打印友好:@media print下隐藏 Tab、三个 page 全部展开(.page{display:block!important});
- SVG marker id 必须跨文件唯一:巩固统一前缀ag*、变式统一前缀av*(合并后 marker 在整文档全局生效,重名会导致箭头错乱);
- 合并后必须重跑步骤 4 的全部自查(尤其 div 配对栈式检查与 marker 重复检查)。
图形要求(硬性):凡题干涉及图形(几何图、函数图像、物理示意图、实验装置图、实物模型等),必须用内嵌 SVG 绘制对应示意图嵌入该题的 <div class="fig"> 容器中,并在图下加一行灰色图注说明图示内容。SVG 绘图约定(配色、箭头 marker、支点/虚线画法)见 references/html-style-guide.md 第 3 节。作图题可画出辅助线并留白让学生补画。禁止用"如图所示(请想象…)"式文字代替图形。
步骤 4:质量自查(写完每个 HTML 后逐项核对)
- [ ] 所有数值经过实际计算验证(答案可整除、比例合理,不出 17.38N 这类无意义数值);
- [ ] 逐项分行(实测用户反馈后新增,必查):易错提示、参考答案与解析中逐项列举的内容每项独占一行,无多项挤在同一段落的情况(全文搜索
(应在产物中已替换为分行); - [ ] div 标签完全配对(实测踩坑后新增,必查):
.fig容器极易在figcap之后漏写闭合</div>,导致后续所有卡片层层嵌套、页面出现多重边框。用 html.parser 栈式解析验证(0 错误、0 未闭合):
python -c "
from html.parser import HTMLParser
import sys
class C(HTMLParser):
def __init__(self):
super().__init__(); self.stack=[]; self.err=[]
def handle_starttag(self,t,a):
if t not in ('br','img','meta','link','hr','input'): self.stack.append((t,self.getpos()[0]))
def handle_endtag(self,t):
if not self.stack: self.err.append(f'line {self.getpos()[0]}: extra </{t}>'); return
ot,ol=self.stack.pop()
if ot!=t: self.err.append(f'line {self.getpos()[0]}: </{t}> crosses <{ot}> at line {ol}')
c=C(); c.feed(open(sys.argv[1],encoding='utf-8').read()); c.close()
print('err:',c.err or 'none','| unclosed:',c.stack or 'none')
" 文件.html
- [ ] 每道练习题同时具备"考查重点 + 易错提示 + 参考答案"三要素;
- [ ] 需要图的题目都有 SVG,且 SVG 内
marker id全文档唯一、无外部<image href>(三合一合并版要求跨单文件唯一:巩固前缀ag*、变式前缀av*); - [ ] 全文搜索确认无
http://、https://、cdn、@import、外链字体(零外部依赖); - [ ]
<meta name="viewport">存在,KPI 栅格在 480px 以下自动降为两列; - [ ] 答案区使用
<details>折叠; - [ ] 中文引号、下标(F₁、l₂)等排版正确。
步骤 5:交付
用 present_files 一次性提交四个 HTML(按"三合一合并版 → 学情分析报告 → 巩固练习 → 变式训练"排序,合并版作为总览入口放首位),并在回复中用简短表格汇总:三份单文件的结论要点(薄弱点 top1、练习构成、变式设计思路)与使用建议(手机/电脑打开合并版即可 Tab 切换浏览,打印时自动展开全部三部分)。
附录:常用命令
PDF 渲染(文本丢失时视觉核对):
python -c "import pymupdf; doc=pymupdf.open('错题.pdf'); [doc[i].get_pixmap(dpi=140).save(f'page_{i+1}.png') for i in range(len(doc))]"
pymupdf 未安装时先创建隔离 venv 并 pip install pymupdf。docx 读取:pip install python-docx。
四份 HTML 生成后的批量自查(marker 重复 / 外链 / viewport / 折叠答案 / 体积,含三合一合并版):
python -c "
import re
for f in ['报告.html','巩固.html','变式.html','三合一.html']:
s = open(f, encoding='utf-8').read()
ids = re.findall(r'marker id=\"([^\"]+)\"', s)
dup = [i for i in set(ids) if ids.count(i) > 1]
print(f[:10], 'dup:', dup or '无', '| 外链:', bool(re.search(r'https?://|@import|<image href', s)),
'| viewport:', 'name=\"viewport\"' in s, '| details:', s.count('<details>'))
"