天津市高考英语完形填空解析
用途
把一份天津市高考英语完形填空真题(原卷或已有解析),生成为一份可直接印发的
解析文档(.docx),版式与内容对齐用户历年真题解析文档的传统。
何时使用
- 用户给出天津卷完形填空真题(docx / pdf / 纯文本 / 图片),要求「解析」「逐题分析」
- 用户要求为完形填空做「词汇注释」「长难句解析」「衔接网络分析」「语篇分析」「翻译」
- 用户要对某一年某一次天津卷完形填空做命题人视角的深度剖析
核心工作流(7 步,严格按序)
0 定位真题 → ①抽取原文与选项 → ②语篇整体分析(深度思考模型)→ ③词汇注释
→ ④翻译(DeepL / 模型)→ ⑤长难句解析 → ⑥逐题解析(六项字段)→ ⑦渲染 docx
↓
glossary_lookup.py(查手册,分流「需联网」清单)
↓
WebFetch(仅对需联网词条补义)
⚠️ ②必须在⑥之前:逐题解析的「宏观结构预测」要回指语篇分析的段落功能表,
先做逐题解析会失去宏观依据。
第 0 步 定位与读取真题
真题通常在 D:\新版外研版高中英语\高考英语真题\ 下按 年份年 第几次\ 分目录存放,
文件名形如 2025 天津卷 第一次 完形填空.docx;无解析的原卷在 原卷\ 子目录。
若需要编辑或读取 docx 内容,先按 workbuddy-office-routing 的规则选择通道
(读/改既有文档 → workbuddy-local-office-edit)。若只是要把正文抽成纯文本供分析,
用 scripts/extract_docx.py 即可,不必走编辑器通道。
需要抽取的内容:
1. 语篇正文(含题号空格 16 与原卷已有的括号中文释义 (中转停留))
2. 20 道小题的四个选项
3. 已给出的答案(若原卷带答案)
第 2 步 语篇整体分析(调用深度思考模型)
按 references/discourse_analysis.md 对完整语篇做深层分析,产出 discourse 对象。
必须覆盖六个维度:语篇结构、篇章主题、逻辑衔接手段、情感线索、语境一致性、命题主轴总结。
调用方式:用 Agent 工具,subagent_type: "general-purpose"、model: "reasoning",
把完整语篇 + references/discourse_analysis.md 一并交给它,要求返回 JSON。
产出要点:
- 段落结构与超主位表(必须标注每段涉及的题号,这是后续「宏观结构预测」的依据)
- 情感弧线(起点→转折→终点),每段引原文句作证据,并标出情感复现处
- 语境三层面:语场 / 语旨 / 语式 → 推出全文基调,作为评价性词汇的判据
- 命题主轴:20 题的考查重心分布 + 题号—图式槽位对应 + 必抓衔接信号清单
第 3 步 词汇注释(核心,脚本化)
这是本技能最确定、最可复用的部分,务必走脚本,不要凭记忆填释义。
# 把语篇存成 passage.txt,扫描并查表(--family 输出词族,与真题文档一致)
python scripts/glossary_lookup.py --passage passage.txt --top 60 --family
# 只要「需联网补义」的清单
python scripts/glossary_lookup.py --passage passage.txt --top 60 --only-online
# 也可直接指定词表
python scripts/glossary_lookup.py --words "tune, spot, in vain, piano" --family
脚本行为:
- 自动探测《高中英语词汇手册.xlsx》(默认在 D:\新版外研版高中英语\高考英语真题\),
也可 --glossary "<绝对路径>" 指定
- 做索引感知的词形还原:shaped→shape、hoped→hope、tuned→tune、
carried→carry、bought→buy(不规则表),并处理连字符与撇号
(piano-tuning→tune、O'Hare→Hare)
- 短语精确匹配:in vain / give away / at random 不会被同首词条目污染
- 输出与真题文档完全一致的表格行:5 列 星级|词条|音标|词性|注释内容
(手册有星级标记时)或 4 列 词条|音标|词性|注释内容
- 把「查无此词」和「释义为空」两类分流为需联网补义清单
词汇选择标准:取语篇中的重点词——解题所依赖的词、选项涉及词、
承载逻辑关系的词、文化专有名词。不要把冠词、介词、代词等虚词全部塞进去。
真题文档惯例是每空附近成组标注(一个空关联的词 + 其搭配/派生)。
补义:按 references/online_dictionaries.md 用 WebFetch 补齐。
注意 Collins 必须用 WebFetch(curl 会 403),Macmillan 当前不可达直接跳过。
补齐后在单元格内注明来源,并给该表加 note 标注 ⚠。
第 4 步 翻译(DeepL 优先)
按 references/translation.md 执行:
python scripts/deepl_translate.py --check # 检验密钥
python scripts/deepl_translate.py --text-file passage.txt -o translation.json
python scripts/deepl_translate.py --text-file passage.txt -o sentences.json # 无密钥时
DeepL 密钥配置:写入 ~/.workbuddy/settings.json 的 env.DEEPL_AUTH_KEY
(Bash 不加载 shell profile,export 无效;脚本会主动读该文件,无需重启)。
未配置时脚本输出待译清单并以退出码 3 结束,此时改用模型翻译通道,
并在 translation.engine_note 如实标注「由模型翻译」——不得伪造译文来源。
产出两部分:
- paragraphs:逐段对照译文,段落与原文严格一一对应
- aligned:关键句中英对照表(必填「关联题号」列),覆盖所有含挖空的句子、
长难句、情感转折句、文化词句
翻译质量红线(从真题文档的真实误译中提炼):保留括号释义、保留引号内容、
人名译名前后统一、不得逐字硬译(如 experienced quiet 须译「体验到了安静」
而非真题文档里的误译「讨厌安静」)。
第 5 步 长难句解析
筛出三层及以上结构的句子,按 references/sentence_analysis.md 的
「五步分析法」+ 用户既有的标注符号系统([] 定语从句、<> 状语、() 补足语、
《》 状语从句、{} 整体、= 同位语)逐步拆解。
每句必须写清:层次切分 L1/L2/L3 → 句法主干与从句 → 语义新信息与逻辑功能 →
信息焦点 → 关联到哪一道小题。若某句关联不到任何小题,就不必列为长难句。
第 6 步 逐题解析
按 references/item_analysis_spec.md,每题必含六项:
① 原文语境 ② 选项辨析 ③ 语法与搭配依据 ④ 逻辑推断依据
⑤ 正确答案及原文证据 ⑥ 排除理由(三个干扰项逐一)。
同时必须覆盖:
大角度一 衔接网络 —— 主要逻辑关系(从 a—r 的 18 类中选,附原文标志词证据)
+ 可选的辅助关系。
大角度二 挖空策略 —— 至少 2 条,取自 A 指称链 / B 逻辑连接词 / 词汇衔接 /
C 主位推进 / D 信息焦点 / E 零主位 / F 省略补全 / G 宏观结构 / H 情景文化语境。
不要机械罗列全部 8 类,与该空无关的不写。
各选项分析表 —— 四列固定表头 选项 | 语义 | 与原文匹配度 | 干扰类型,
4 个选项逐一分析,干扰类型从 item_analysis_spec.md 的实证词表选,
正确项的干扰类型列留空。匹配度采用「评级:理由」冒号融合写法(2025 卷惯例)。
语篇层面的宏观预测要回指第 2 步 discourse.paragraph_map 的题号对应。
第 7 步 渲染成文档
python scripts/build_docx.py result.json -o "2025天津卷第一次 完形填空解析.docx"
脚本仅依赖标准库,不需要 python-docx。生成后用 present_files 呈现给用户。
输出 JSON 数据结构
{
"title": "2025年天津市高考英语·第一次 完形填空解析",
"meta": { "卷别": "天津卷·第一次", "题型": "完形填空(16—35)" },
"passage": ["第1段原文(含题号与括号释义)", "..."],
"options": ["16. A. donated B. spotted C. tuned D. purchased", "..."],
// ===== 第2步产出:语篇整体分析 =====
"discourse": {
"genre": "记叙文(人物新闻特写)",
"structure": "Orientation → Complication → Resolution → Evaluation",
"macroscopic_theme": "开篇核心陈述:……",
"tense_frame": "全文主时态为过去时",
"theme": { "explicit": "…", "implicit": "…", "carrier": "承载句原文" },
"paragraph_map": [
{ "para": 1, "superordinate": "主题句原文", "function": "Orientation(开端)",
"items": [16, 17] }
],
"cohesion_index": { "connectives": ["when","after"], "reference": ["they→strangers"],
"lexical": ["rare ↔ one of the few"], "markers": ["eventually"],
"rhetoric": ["world came crashing down(夸张)"] },
"emotion_thread": { "arc": "失望 → 反思 → 同情 → 自豪",
"evidence": [{ "emotion": "失望", "quote": "原文句" }],
"recur": ["第3段 I wept 与第8段的情感复现"] },
"context": { "field": "…", "tenor": "…", "mode": "…", "tone": "…", "anti_schema": "无" },
"axis_summary": "事件链(9题) + 因果解释(5题) + 搭配(4题) + 文化语境(2题)",
"item_map": "16—19 Orientation;24—27 Complication;28—32 Resolution;33—35 升华",
"key_items": ["27(搭配+文化语境)", "33(情感复现)"],
"must_catch": ["when","after","because","but","that","破折号","冒号","and"]
},
"sentences": [
{ "text": "长难句原文",
"layers": "L1 ...;L2 ...;L3 ...",
"syntax": "句法分析",
"semantics": "语义分析",
"focus": "信息焦点" }
],
"glossary": [
{ "head": "tune(★核心词)",
"rows": [["**","tune","/tjuːn/","n.","1.曲调;曲子"],
["**","tune","/tjuːn/","v.","(为乐器)调音,校音"]] },
{ "head": "piano ⚠ 手册未给出释义",
"rows": [["","piano","/piˈænəʊ/","n.","钢琴(据 Collins 补齐)"]],
"note": "⚠ 《高中英语词汇手册》中该词条「释义」列为空……" }
],
// ===== 第6步产出:逐题解析六项字段 =====
"items": [
{ "no": 16,
"stem": "he 16 a public piano at Chicago O'Hare International Airport",
"context": {
"sentence_en": "when he spotted a public piano at Chicago O'Hare International Airport.",
"sentence_zh": "在芝加哥奥黑尔国际机场发现了一架公共钢琴。",
"before": "…on his way to Florida",
"after": "He played a few notes. It was the worst piano he'd ever played."
},
"options_note": [
"A. donated 捐赠:与「偶然看到」的语境不符(发现者≠捐赠者)",
"B. spotted 发现、注意到:与 when 引导的时间背景吻合",
"C. tuned 调音:与人物职业相关,但此刻尚未开始调音",
"D. purchased购买:公共钢琴不可能被购买"
],
"grammar": "【搭配】spotted a piano 为动宾搭配;【时态】全文主时态为过去时,spotted 与 he was on his way 一致。",
"logic": {
"cohesion": ["主要逻辑关系:事件顺序/时间顺序。标志词是 when……",
"辅助:原因——……"],
"strategy": ["挖空策略:情景/文化语境线索——……",
"词汇衔接:spotted → played → tune(复现/搭配)"],
"structure": "宏观结构预测:Complication 起点(discourse 第1段)"
},
"answer": "B. spotted(发现、注意到)",
"evidence": "when he spotted a public piano at Chicago O'Hare International Airport;后文 He played a few notes 证明先发现后弹奏。",
"elimination": [
"A. donated:他是发现者不是捐赠者 —— 语义无关",
"C. tuned:当时只是弹了几个音,尚未调音 —— 职业词干扰",
"D. purchased:公共钢琴不可能被购买 —— 语义无关"
],
"option_rows": [
["选项", "语义", "与原文匹配度", "干扰类型"],
["A. donated", "捐赠", "低:他是发现者,不是捐赠者", "语义无关"],
["B. spotted", "发现、注意到", "高:在机场路上偶然看到公共钢琴,与后文 played a few notes 构成先后动作", ""],
["C. tuned", "调音", "低:当时只是弹了几个音,尚未调音", "职业词干扰"],
["D. purchased", "购买", "低:公共钢琴不可能被购买", "语义无关"]
] }
],
// ===== 第4步产出:翻译 =====
"translation": {
"engine": "deepl",
"engine_note": "DeepL API(api-free)", // 无密钥时写「未配置 DEEPL_AUTH_KEY,由模型翻译」
"aligned": [
{ "no": 1,
"en": "Six months ago, he was on his way to Florida when he spotted a public piano…",
"zh": "六个月前,他在去佛罗里达的路上……发现了一架公共钢琴。",
"items": [16],
"why": "含第16空,when 标记事件顺序" }
],
"paragraphs": [ { "en": "...", "zh": "..." } ]
},
"closing": ["命题规律总结……"]
}
bundled 资源
| 文件 | 作用 |
|---|---|
scripts/glossary_lookup.py |
查《高中英语词汇手册》并输出规范表格行;分流「需联网」清单 |
scripts/extract_docx.py |
从真题 .docx 抽取正文与选项为纯文本 |
scripts/deepl_translate.py |
DeepL 翻译 + 逐句对照;无密钥时产出待译清单并降级模型翻译 |
scripts/build_docx.py |
把结果 JSON 渲染成 .docx(仅标准库) |
references/discourse_analysis.md |
语篇分析六维度规范(结构/主题/衔接手段/情感线索/语境一致性/命题主轴) |
references/item_analysis_spec.md |
逐题六项字段规范 + 实证干扰类型词表 + 匹配度写法 |
references/analysis_framework.md |
衔接网络 18 类 + 挖空策略 A—H |
references/sentence_analysis.md |
长难句标注符号系统 + 五步分析法 + 句型速查 |
references/translation.md |
DeepL 接入方式 + 翻译质量红线 + 逐句对照格式 |
references/online_dictionaries.md |
在线词典优先级、URL 模板、访问方式与坑 |
references/sample_output.json |
完整示例数据,可直接改写 |
质量红线
- 释义必须来自手册或在线词典原文,不得凭记忆编造音标与释义。
- 匹配度必须带原文依据,「高」后面一定要有原文证据,否则等于没分析。
- 干扰类型从
item_analysis_spec.md实证词表取,不自造。 - 每题必须含六项字段(原文语境/选项辨析/语法与搭配/逻辑推断/答案+证据/排除理由),
且四选项逐一分析,缺一不可。 - 语篇分析必须在逐题解析之前完成,且逐题的宏观预测要回指段落功能表。
- 手册无星级时星级列留空,不自行杜撰 ⭐ 标记。
- 需联网补义的必须显式标注 ⚠ 并注明来源。
- 译文来源必须如实标注(DeepL / 模型),不得伪造。