以下是一个基于 Python 的 Word 文档内容 智能提取与合成 的完整实现方案。该方案使用 python-docx
库处理 .docx
文件,结合 正则表达式 和 样式识别 实现结构化数据提取,并支持多文档合成新文档。
🧰 环境准备
pip install python-docx
📥 文档内容提取模块
✅ 功能说明:
- 提取标题、负责人、进度等关键信息
- 提取表格内容
- 支持正则匹配关键词(如“负责人:”)
- 识别段落样式(如
Heading 1
)
from docx import Document
import re
def extract_content(doc_path):
"""
提取 Word 文档中的结构化内容
返回包含项目名称、负责人、进度和表格的字典
"""
doc = Document(doc_path)
data = {
"project_name": "",
"manager": "",
"progress": "",
"tables": []
}
for para in doc.paragraphs:
text = para.text.strip()
if para.style.name == "Heading 1" and not data["project_name"]:
data["project_name"] = text
elif re.match(r"负责人[::]", text):
data["manager"] = re.sub(r"负责人[::]\s*", "", text)
elif re.match(r"进度[::]", text):
data["progress"] = re.sub(r"进度[::]\s*", "", text)
for table in doc.tables:
table_data = []
for row in table.rows:
row_data = [cell.text.strip() for cell in row.cells]
table_data.append(row_data)
data["tables"].append(table_data)
return data
📤 内容合成模块
✅ 功能说明:
- 将多个文档提取的数据合成到一个新的 Word 文档中
- 支持表格复制和格式保留
- 支持自定义样式(如字体大小、加粗)
from docx.shared import Pt
def generate_summary(docs_data, output_path="summary.docx"):
"""
将多个文档的提取数据合成到新文档
"""
summary_doc = Document()
# 添加标题
summary_doc.add_heading("项目汇总报告", 0)
for idx, data in enumerate(docs_data, 1):
summary_doc.add_heading(f"项目 {idx}: {data['project_name']}", level=1)
summary_doc.add_paragraph(f"负责人: {data['manager']}")
summary_doc.add_paragraph(f"进度: {data['progress']}")
if data["tables"]:
for table_data in data["tables"]:
if table_data:
rows = len(table_data)
cols = len(table_data[0])
doc_table = summary_doc.add_table(rows=rows, cols=cols)
for i, row in enumerate(table_data):
for j, cell_text in enumerate(row):
doc_table.cell(i, j).text = str(cell_text)
# 保存文档
summary_doc.save(output_path)
print(f"合成文档已保存至 {output_path}")
🔄 工作流示例
✅ 示例代码
def main():
# 示例文档路径列表
doc_paths = ["project1.docx", "project2.docx", "project3.docx"]
# 提取所有文档内容
all_data = [extract_content(path) for path in doc_paths if extract_content(path)]
# 合成汇总文档
generate_summary(all_data, "project_summary.docx")
if __name__ == "__main__":
main()
🧠 高级功能建议
1. 样式继承
- 使用
python-docx
的样式管理功能,保持原文档样式 - 示例:复制段落样式
from docx.enum.text import WD_COLOR_INDEX
p = summary_doc.add_paragraph()
p.style = doc.styles["Heading 1"]
2. 正则表达式扩展
- 支持多行匹配、模糊匹配等高级用法
- 示例:提取多行进度说明
PROGRESS_PATTERN = re.compile(r"(?:进度|Progress)[::]\s*([\s\S]*?)(?=\n[A-Z]|$)", re.MULTILINE)
3. 异常处理
- 捕获文件读取错误、空数据等问题
try:
doc = Document(doc_path)
except Exception as e:
print(f"加载文档失败 {doc_path}: {str(e)}")
return None
4. 多格式支持
- 使用
pywin32
或unoconv
处理.doc
格式
pip install pywin32
🧪 示例输入输出
✅ 输入(project1.docx 内容)
# 项目A开发计划
负责人:张三
进度:完成需求分析
| 模块 | 负责人 | 状态 |
|------|--------|------|
| 登录 | 张三 | ✔️ |
| 支付 | 李四 | △️ |
✅ 输出(project_summary.docx 内容)
# 项目汇总报告
## 项目 1: 项目A开发计划
负责人: 张三
进度: 完成需求分析
| 模块 | 负责人 | 状态 |
|------|--------|------|
| 登录 | 张三 | ✔️ |
| 支付 | 李四 | △️ |
🚀 应用场景
- 项目报告汇总:自动收集各子项目的里程碑、预算表、风险分析
- 合同条款提取:提取关键条款(付款条件、违约责任等)并生成对比表
- 技术文档标准化:从分散文档中提取接口定义、参数说明并统一格式
🛠 注意事项
项目 | 说明 |
---|---|
兼容性 | 仅支持 .docx 格式,处理 .doc 需先转换 |
样式控制 | 使用 python-docx 的样式管理功能 |
性能优化 | 处理大型文档时建议分批处理 |
扩展性 | 可通过插件机制支持不同提取规则 |
通过该框架,您可以快速构建一个自动化文档处理系统,适用于企业、团队或个人的文档管理需求。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END