Python实现word文档内容智能提取以及合成

Python实现word文档内容智能提取以及合成

以下是一个基于 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. 多格式支持

  • 使用 pywin32unoconv 处理 .doc 格式
  pip install pywin32

🧪 示例输入输出

✅ 输入(project1.docx 内容)

# 项目A开发计划
负责人:张三
进度:完成需求分析

| 模块 | 负责人 | 状态 |
|------|--------|------|
| 登录 | 张三   | ✔️   |
| 支付 | 李四   | △️   |

✅ 输出(project_summary.docx 内容)

# 项目汇总报告

## 项目 1: 项目A开发计划
负责人: 张三
进度: 完成需求分析

| 模块 | 负责人 | 状态 |
|------|--------|------|
| 登录 | 张三   | ✔️   |
| 支付 | 李四   | △️   |

🚀 应用场景

  1. 项目报告汇总:自动收集各子项目的里程碑、预算表、风险分析
  2. 合同条款提取:提取关键条款(付款条件、违约责任等)并生成对比表
  3. 技术文档标准化:从分散文档中提取接口定义、参数说明并统一格式

🛠 注意事项

项目说明
兼容性仅支持 .docx 格式,处理 .doc 需先转换
样式控制使用 python-docx 的样式管理功能
性能优化处理大型文档时建议分批处理
扩展性可通过插件机制支持不同提取规则

通过该框架,您可以快速构建一个自动化文档处理系统,适用于企业、团队或个人的文档管理需求。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享