Docx 大纲等级目录提取
提取原理
OOXML(.docx)中,段落的"大纲等级"有两个来源,优先级从高到低:
- 段落直接设置 —
<w:pPr><w:outlineLvl w:val="0"/>(段落属性直接指定) - 样式继承 — 段落引用样式
<w:pPr><w:pStyle w:val="1"/>,该样式在 styles.xml 中定义了<w:outlineLvl>
OutlineLvl 取值:0=最高级(类似Heading1),1=二级,... 8=九级。
执行步骤
第1步:确认目标文件
向用户确认要分析的 .docx 文件路径。如果用户只说"当前文件夹",则列出当前目录中的 .docx 文件让用户选择。
第2步:运行提取脚本
使用 scripts/extract_outline.py 脚本:
python <skill-base>/scripts/extract_outline.py <docx文件路径> [--output <输出txt路径>]
参数说明:
- 第一个参数(必需):docx 文件路径
--output(可选):输出 txt 路径,默认与 docx 同目录、同文件名 +_大纲目录.txt
脚本自动完成:
- 解析 styles.xml,建立
styleId → outlineLvl映射表 - 遍历 document.xml 所有段落,优先取段落直接 outlineLvl,其次取样式继承
- 按大纲等级缩进输出,0级顶格,每级增加2空格缩进
- 统计各级别段落数量,附在末尾
第3步:向用户汇报
输出:
- 每个文档的样式→大纲等级映射表
- 各文档有 outlineLvl 的段落总数
- 输出文件路径
输出格式示例
======================================================================
文档大纲等级目录
文件:xxx.docx
日期:2026-05-27
======================================================================
[L0] 施工经验 ← 样式ID=1 → outlineLvl=0
[L1] 第一节 总体施工部署 ← 样式ID=2 → outlineLvl=1
[L2] 1.总体思想 ← 样式ID=3 → outlineLvl=2
[L2] 2.施工部署的原则
[L1] 第二节 测量方案
[L2] ...
────────────────────────────────────────────────────────
统计:L0=2段 L1=18段 L2=38段 合计=58段
======================================================================
常见情况
| 情况 | 处理方式 | |------|---------| | styles.xml 中样式无 outlineLvl | 该样式段落视为普通正文,不输出 | | 段落既无直接 outlineLvl 也无样式 | 跳过(普通正文) | | 段落直接 outlineLvl 与样式不同 | 以段落直接值为准 |
注意事项
- 不需要 pandoc、python-docx 等第三方库
- 纯 Python 标准库:zipfile + xml.etree.ElementTree
- 编码:输入和输出均为 UTF-8
关于
- 品牌: Boo哥AI智写
- 联系方式: QQ邮箱 409966830@qq.com
- 座右铭: 智写万象,标定未来
Scan to join WeChat group