Skip to content

IronRookieCoder/docs-extractor

Repository files navigation

docs-extractor:办公文档片段内容提取工具集

docs-extractor 是一组面向截断、分割或轻度损坏办公文档的文本与图片提取工具。项目重点不是还原完整版式,而是在文件结构不完整、常规解析库无法打开时,尽可能从片段中恢复可读内容,适用于数据安全风控、文档恢复、内容审计和格式预研场景。

核心能力

  • 支持从 Office Open XML、OLE2、BIFF、PDF 对象流和 WPS 私有格式片段中提取内容。
  • 支持文本提取、图片识别、媒体目录输出、质量统计和调试日志。
  • 对截断文件采用多层容错策略,包括字节扫描、结构重建、流式解压、XML/BIFF/OLE 解析降级和文本过滤。
  • 对 PDF 采用最小化重建思路,优先重建可读 PDF,再借助成熟库提取文本和图片。
  • 每个格式模块尽量保持单独入口,便于独立测试、替换和扩展。

支持格式

格式 模块目录 主要入口 提取内容 技术路线
.docx src/docs_extractor/docx/ word_recovery.py 文本、图片 OOXML ZIP 扫描、XML 提取、<w:t> 文本解析、media 目录恢复
.xlsx src/docs_extractor/xlsx/ xlsx_fragment_text_extractor.py 文本、图片 字节级 XML 标签扫描、文本分类、图片签名识别
.pptx src/docs_extractor/pptx/ pptx_fragment_text_extractor.py 文本、图片 OOXML ZIP/XML 恢复、幻灯片/备注/表格/SmartArt 文本解析
.pdf src/docs_extractor/pdf/ extract.py 文本、图片 PDF 对象扫描、最小化重建、PyMuPDF/pdfplumber 提取
.doc src/docs_extractor/doc/ doc_fragment_extractor.py 文本、图片 OLE2 复合文档解析、WordDocument 流解析、文本过滤
.xls src/docs_extractor/xls/ xls_fragment_extractor.py 文本、图片 OLE2 + BIFF 记录解析、SST/工作表/绘图记录处理
.ppt src/docs_extractor/ppt/ ppt_fragment_extractor.py 文本、图片 OLE2 复合文档解析、PowerPoint 记录扫描、多层降级
.wps src/docs_extractor/wps/ wps_extractor.py 文本、图片 OLE 结构化解析、WPS 文本流和图像流提取
.et src/docs_extractor/et/ et_fragment_extractor.py 文本、图片 BIFF8 记录增量解析、SST/单元格/图像记录提取

安装

建议使用 Python 3.7+。大部分模块以标准库为主,PDF 模块建议安装第三方库以提升提取质量。

cd D:\PR\docs-extractor
pip install -e .

PDF 推荐依赖:

pip install -e ".[pdf]"

DOC 文本过滤可选依赖:

pip install -e ".[doc]"

快速使用

推荐使用统一入口:

python -m docs_extractor extract --format pdf --input .\test\fixtures\pdf\pdf_part_aa --output .\output\pdf

格式专用入口仍可使用:

python -m docs_extractor.pdf.extract .\test\fixtures\pdf\pdf_part_aa .\output\pdf

常用格式示例:

python -m docs_extractor extract --format docx --input .\test\fixtures\docx --output .\output\docx

python -m docs_extractor extract --format xlsx --input .\test\fixtures\xlsx --output .\output\xlsx

python -m docs_extractor extract --format pptx --input .\test\fixtures\pptx --output .\output\pptx

python -m docs_extractor extract --format doc --input .\test\fixtures\doc\doc_part_aa --output .\output\doc

python -m docs_extractor extract --format xls --input .\test\fixtures\xls\xls_part_aa --output .\output\xls

python -m docs_extractor extract --format ppt --input .\test\fixtures\ppt\ppt_part_aa --output .\output\ppt

python -m docs_extractor extract --format wps --input .\test\fixtures\wps\wps_part_aa --output .\output\wps

python -m docs_extractor extract --format et --input .\test\fixtures\et\et_part_aa --output .\output\et

输出通常包含:

output/
├── output.txt
└── media/

PDF 模块还会生成用于调试的 rebuilt.pdf

输出约定

不同模块的历史实现略有差异,但推荐统一关注以下产物:

  • output.txt:所有提取文本的汇总文件。
  • media/:提取出的图片或媒体文件目录。
  • *.log / *_report.txt / *_summary.txt:调试、统计和质量报告。
  • rebuilt.pdf:PDF 模块用于调试的最小化重建文件。

如果需要统一对接下游系统,建议以 output.txtmedia/ 作为稳定交付边界。

技术路线

OOXML 类格式

.docx.xlsx.pptx 本质上是 ZIP 容器加 XML 文件。片段提取的关键是尽量绕过完整 ZIP 中央目录依赖,通过局部文件头扫描、流式解压和 XML 标签解析恢复内容。

文档片段 -> ZIP/字节扫描 -> XML/媒体条目定位 -> 多策略解压 -> 文本与图片输出

OLE2 / BIFF 类格式

.doc.xls.ppt.wps.et 主要依赖 OLE2 复合文档结构或 BIFF 记录。片段提取需要解析扇区、目录项、流数据和格式专有记录,并在结构损坏时降级为记录扫描。

文档片段 -> OLE2 头解析 -> FAT/目录/流定位 -> 格式记录解析 -> 文本与图片输出

PDF 格式

PDF 片段通常缺少完整交叉引用表或尾部结构。项目采用最小化重建策略:先扫描可用对象,补齐 Catalog、Pages、Resources 等最小结构,再交给成熟 PDF 库提取。

PDF片段 -> 对象扫描 -> 最小结构重建 -> 第三方库提取 -> 输出质量比较

目录结构

docs-extractor/
├── src/docs_extractor/    # 正式源码
├── docs/                  # 架构、实践、格式技术文档和归档材料
├── test/fixtures/         # 各格式样本片段
├── test/tests/            # 自动化 smoke test
├── scripts/               # 辅助脚本
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
└── README.md

适用场景

  • 数据安全风控中的办公文档内容扫描。
  • 文件分片、传输中断或轻度损坏后的文本恢复。
  • 对未知办公格式进行技术预研和可行性验证。
  • 为后续 AI 分析、检索或审计流程准备文本和图片输入。

限制说明

  • 片段提取不是完整文件修复,无法保证恢复原始版式、页码、单元格坐标或动画效果。
  • 压缩流、OLE 扇区链、PDF 字体映射严重缺失时,文本可能不完整或顺序错乱。
  • 图片提取依赖片段中是否包含完整图片数据,部分格式在截断片段中可能只能恢复部分图片。
  • .et 多工作表场景仍存在覆盖不完整的问题。
  • 除 PPT 模块外,部分模块在特定样本中可能出现图片截断,需要结合输出报告人工判断。

参考文档

  • docs/architecture.md:项目结构和入口约定。
  • docs/reports/AI赋能技术预研成果汇报.md:项目背景、AI 辅助预研过程和成果总结。
  • docs/ai-research-practice.md:使用 Claude Code 做格式预研的实践经验。
  • docs/implementation-comparison.md:PPTX 与 PDF 模块实现方式对比。
  • docs/formats/:各格式的原理、实现方案和历史模块 README。
  • src/docs_extractor/*/CLAUDE.md:对应模块的 Agent 工作指导。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors