1. 实际应用场景描述
在企业、科研、法律、教育等领域,我们经常需要处理大量的 Word 报告、论文、合同等长文档。
- 领导或客户要求快速了解报告的核心内容和结构。
- 法务人员需要快速定位合同条款。
- 研究人员需要从多篇论文中提取研究框架。
如果有一个智能程序,能够 批量读取 Word 文档,自动提取 标题层级 和 关键句,并生成 结构化大纲,就能大幅提升文档梳理的效率。
2. 痛点分析
1. 人工翻阅耗时:长文档翻页查找重点非常低效。
2. 结构不清:标题层级混乱时,难以把握整体逻辑。
3. 批量处理难:一次只能处理一份文档,无法快速对比多篇。
4. 关键句提取难:重要内容散落在各处,不易捕捉。
3. 核心逻辑讲解
3.1 读取 Word 文档
- 使用
"python-docx" 库解析
".docx" 文件,获取段落、样式、字体大小等信息。
3.2 标题识别
- 根据 样式名称(如“标题 1”、“标题 2”)或 字体大小 判断标题层级。
- 可扩展为 NLP 模型识别语义上的标题(即使样式不规范)。
3.3 关键句提取
- 使用 规则(如每段首句、包含特定关键词的句子)或 TextRank 算法 提取关键句。
- 可结合 TF-IDF 计算句子重要性。
3.4 大纲生成
- 按标题层级构建树形结构,并在每个标题下附加关键句。
- 输出为 Markdown 或纯文本大纲,方便阅读和进一步处理。
3.5 批量处理
- 遍历指定文件夹,批量读取所有 Word 文档并生成对应大纲。
4. 模块化代码(Python)
# doc_outline_extractor.py
import os
from docx import Document
class DocOutlineExtractor:
def __init__(self):
pass
def is_heading(self, paragraph):
"""判断是否为标题(根据样式名)"""
style = paragraph.style.name.lower()
return 'heading' in style or '标题' in style
def heading_level(self, paragraph):
"""获取标题级别(数字)"""
style = paragraph.style.name.lower()
if '标题 1' in style or 'heading 1' in style:
return 1
elif '标题 2' in style or 'heading 2' in style:
return 2
elif '标题 3' in style or 'heading 3' in style:
return 3
return None
def extract_key_sentence(self, paragraph):
"""提取关键句(简单规则:取首句)"""
text = paragraph.text.strip()
if not text:
return ""
# 取第一句话
sentences = text.split('。')
return sentences[0] + '。' if sentences else ""
def process_doc(self, file_path):
"""处理单个 Word 文档"""
doc = Document(file_path)
outline = []
for para in doc.paragraphs:
if self.is_heading(para):
level = self.heading_level(para)
if level:
outline.append({
'level': level,
'title': para.text.strip(),
'key_sentence': self.extract_key_sentence(para)
})
return outline
def generate_markdown_outline(self, outline, title):
"""生成 Markdown 格式大纲"""
md = f"# {title}\n\n"
for item in outline:
indent = " " * (item['level'] - 1)
md += f"{indent}- **{item['title']}**\n"
if item['key_sentence']:
md += f"{indent} - {item['key_sentence']}\n"
return md
def batch_process(self, folder_path, output_folder):
"""批量处理文件夹内所有 .docx 文件"""
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(folder_path):
if filename.endswith('.docx'):
file_path = os.path.join(folder_path, filename)
outline = self.process_doc(file_path)
md_content = self.generate_markdown_outline(outline, filename.replace('.docx', ''))
output_file = os.path.join(output_folder, filename.replace('.docx', '.md'))
with open(output_file, 'w', encoding='utf-8') as f:
f.write(md_content)
print(f"已生成大纲:{output_file}")
def main():
extractor = DocOutlineExtractor()
folder = input("请输入 Word 文档所在文件夹路径:").strip()
output = input("请输入大纲输出文件夹路径:").strip()
extractor.batch_process(folder, output)
print("批量处理完成!")
if __name__ == "__main__":
main()
5. README 文件
# Word 文档大纲自动生成工具
基于 Python + python-docx,批量处理 Word 文档,提取标题和关键句,自动生成 Markdown 格式大纲。
## 功能
- 批量读取 .docx 文件
- 识别标题层级
- 提取关键句
- 生成结构化大纲(Markdown)
## 安装依赖
bash
pip install python-docx
## 使用
bash
python doc_outline_extractor.py
输入 Word 文档所在文件夹路径和大纲输出文件夹路径。
## 示例
输入文件夹中有 `report.docx`,输出 `report.md`:
report
- 引言
- 本报告旨在探讨...
- 方法
- 我们采用问卷调查法...
6. 使用说明
1. 安装
"python-docx"。
2. 将所有待处理的 Word 文档放在同一文件夹。
3. 运行脚本,输入输入文件夹和输出文件夹路径。
4. 程序会为每个 Word 文档生成一个 Markdown 大纲文件。
5. 可用 Typora、VS Code 等工具查看和编辑大纲。
7. 核心知识点卡片
知识点 说明
python-docx 读取和操作 Word 文档
标题识别 根据样式名或字体大小判断标题层级
关键句提取 规则截取或 TextRank/TF-IDF 算法
Markdown 生成 结构化输出,便于阅读和分享
批量处理 遍历文件夹,自动化流水线
8. 总结
本项目展示了如何用 Python + python-docx + 规则/NLP 快速实现一个 Word 文档大纲自动生成工具,解决了长文档梳理逻辑的痛点。
- 优点:自动化程度高、可批量处理、输出结构化。
- 未来可引入 深度学习标题识别模型(如 LayoutLM)和 GPT 关键句提取,提升对复杂版式和非规范文档的处理能力。
- 适合作为 AI 方法与技术课程 的实践案例,涵盖文档解析、信息抽取、结构化输出等内容。
如果你愿意,可以升级为 LayoutLM 版本,支持扫描版 PDF 转 Word 后再提取大纲,让它能处理更多类型的文档。
利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我!