短语提取器
把一份或多份早读材料变成两件交付物:短语表 Excel + 跟读 Word。顺序永远按原文(多文件时按用户给出的文件顺序),去重只保留首次出现。
交付物规格
Excel(<名称>_重点短语.xlsx,工作表“重点短语”)
- 第一行表头 English | 中文(用户要序号时加 --with-index,变成 序号 | English | 中文)
- 英文列保留原短语(保留 sb/sth 缩写、保留 ...);中文列只留核心释义,删掉括号提示语,... 统一为三个点
Word(<名称>_重点短语.docx)
- 无标题、无页眉;每个短语连续两行(两行内容完全相同),短语与短语之间恰有一个空行,结尾不留空行
- 只留英文;sth → something、sb → somebody;... 原样保留;Times New Roman 12pt,段前段后 0
详细清洗规则、边界情况与实测案例见 references/rules.md(遇到反常切分时读它)。
环境
PY="C:/Users/huawei/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
# 首次使用或缺依赖时:
"$PY" -m pip install python-docx openpyxl pywin32
pywin32 只用于把旧版 .doc 通过本机 Word 转成 .docx;纯 .docx 材料不需要它。
工作流
- 确认输入:拿到材料路径(可多份)与输出目录(默认当前工作目录下
outputs/)。文件名、Unit 号以材料为准,不要凭空改写。 - 抽取:跑解析器,每条都会带上原文片段落到 JSON。
bash "$PY" "<skill>/scripts/parse_phrases.py" "材料一.docx" ["材料二.docx" ...] \ -o "$TMPDIR/phrases.json" --title "必修一Unit1" - 核对(必做):解析器打印
N. english || 中文清单与需人工核对:k 条 [序号]。
-k = 0且清单读起来正确 → 下一步。
- 有< ! >标记 → 看该条raw判断是原文粘连还是切分失误:- 原文本身就粘成一条 → 用
Edit在 JSON 里手工拆成两条(保持原顺序); - 切分失误 → 直接改 JSON 的
english/chinese字段。 - 顺手扫一眼条数与原文编号最大值是否吻合;差得多说明小节定位或编号链出问题,按
references/rules.md排查。
- 原文本身就粘成一条 → 用
- 生成两份文档(脚本自带回读自检,结构不符会非 0 退出):
bash "$PY" "<skill>/scripts/build_deliverables.py" "$TMPDIR/phrases.json" -o outputs --name "必修一Unit1"
自检项:Excel 表头 / 行数 / 无重复;Word 段落数 = 2n+(n−1)、每个短语恰好相邻两行、空行位置正确、无中文残留、无 sb/sth 残留、...数量一致。 - 交付:给用户两份文件路径 + 条数摘要(含去重删掉的条目),并用
present_files同时展示 xlsx 与 docx。
常用参数
| 需求 | 做法 |
|---|---|
| 加序号列 | build_deliverables.py ... --with-index |
| 不去重 | --keep |
| 换字体 / 字号 | --font "Calibri" --size 11 |
| 指定输出目录 | -o "D:/xxx/outputs" |
注意
- 不要每来一份材料就现写一套抽取逻辑;要改规则就改
scripts/里的脚本,保持可复用。 - “词形变形工坊 / 教材好句 / Part1 词性转换”等小节不是短语,解析器已按小节标题截断。若某份材料的短语小节标题不含“短语”二字(如“二、高频表达”),把
find_section的关键词补上再跑。 - 中文列里
(美)这类两字以内的短标签会保留(属于释义的一部分),长句提示语、含!/⚠/同义/后接…的括号一律删除。