英语句子排序题生成器
用途
把英文句子拆成合乎语法成分的词块并打乱,生成可直接印发/打印的"连词成句"练习。
一篇材料进来,自动分出五个难度档,让不同水平的学生做不同难度的题。
核心分工
机械性工作交给脚本,语言学判断留给模型。
- 脚本(
scripts/scramble.py)确定性完成:分句、打分分档、打乱、去重、排版、导出 docx/txt/pdf。 - 模型负责:短语切块质量、中文翻译、语法点、骨架与干扰词的设计。
脚本的启发式切块只是兜底,不要直接把 prepare 的自动切块结果当成品——必须由模型逐句复核并改写 chunks。
环境
PY="C:/Users/lixianyong/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
S="C:/Users/lixianyong/.workbuddy/skills/english-sentence-scramble/scripts/scramble.py"
已装依赖:python-docx(生成 docx)、pywin32 + 本机 Word(docx→PDF)、PyMuPDF(读 pdf)、reportlab(PDF 降级)。
脚本内路径均为绝对路径引用,无需激活虚拟环境。
工作流
第 1 步:抽取与分档(长材料走这步;单个句子可跳过)
$PY "$S" prepare --input 原文.docx --out out/spec.json --title "必修三U2 句子排序"
# 或直接给文本: --text "I am very happy to be here. ..."
产出 spec.json:每句含 sentence / score / features / band / chunks(自动) / translation(空) / grammar(空)。
第 2 步:模型补写 spec.json(本技能的质量命门)
逐条填写,规则见 references/spec-schema.md:
chunks—— 按语法成分重写短语切块。要点:固定搭配不可拆;名词短语/介词短语/不定式整体保留;
从句关连词(which/who/because/so that/although)必须单独成块,这是本题型真正的考点。translation—— 全句中文翻译。grammar—— 1–3 条语法点:句型、从句类型、核心词块、易错点。band—— 若老师的教学判断与算法不同,直接覆盖(如把某个含生词的短句提到 L4)。- 仅当老师要"挖空式半提示"时,另写
skeleton(用{0}{1}占位)和pool。
用 Edit 工具就地修改 spec.json,不要重新生成。
第 3 步:生成练习卷
$PY "$S" build --spec out/spec.json --outdir out --formats docx,txt,pdf \
--variants 1 --seed 1 --mode auto --granularity auto
常用参数:
| 参数 | 作用 |
|---|---|
--variants N |
一次出 N 套互不相同的平行卷(A/B/C 组),答案卷共用一份 |
--seed N |
"再来一次重新打乱"——换个数字即可 |
--mode |
auto(按档位)/blind 无提示 /given 已给部分词 /skeleton 挖空式半提示 |
--granularity |
auto/word 按单词 /phrase 按短语 /mixed 混合 |
--distractor |
每题混入 1 个不属于该句的词块(需在 spec 里写 distractor 字段) |
--formats |
docx,txt,pdf 任意组合;PDF 走本机 Word 导出,失败会提示手动另存 |
第 4 步:交付
用 present_files 展示 _学生卷 / _答案卷 的 docx 与 pdf(脚本目前合并输出为单文件:
学生卷在前、答案卷分页在后)。默认输出目录用当前工作区下的 outputs/sentence-scramble/<标题>/。
单句快速模式
老师只给一句话时,跳过 prepare,直接手写 spec.json 再 build:
{"meta":{"title":"单句练习"},"items":[
{"id":1,"sentence":"I am very happy to be here.",
"band":"L2","chunks":["I","am very happy","to be here"],
"translation":"我很高兴来到这里。","grammar":["句型:主语+be+adj.+to do"]}]}
档位口径
L1=30–60 分 / L2=61–80 分 / L3=81–90 分 / L4=91–100 分 / L5=101–120 分。
越弱的档:块越大(短语块)、提示越多(已给首词甚至末词);越强的档:切得越碎(按单词)、零提示。
评分公式与调档方法见 references/difficulty-bands.md。
已知取舍(需要时向老师说明)
- 句末标点从词块中剥离,学生需自行补上大小写和句号——这是有意的考点,卷首已提示。
- 句内逗号在切块时丢弃,避免产生
heavily,这类怪块。保留逗号需改clean_words。 - 材料太简单凑不出 L5 时,如实说明并建议改用 word 粒度或换材料,不要硬拆简单句充数。
- 扫描版 PDF(图片型)无法提字,需老师先做 OCR。
.doc需先另存为.docx。