pdfstract
统一 PDF 提取-分块-向量化管道,一行代码搞定 RAG 数据准备
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
统一 PDF 提取-分块-向量化管道,一行代码搞定 RAG 数据准备
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:深夜,产品经理甩给你一份 200 页的 PDF 财报,让你从中提炼出关键财务数据、竞品对比和战略建议。你会怎么做?——逐页复制粘贴?还是扔给 ChatGPT 但发现它根本读不完?
PDFStract 正是为这类痛点而生。它是一个统一的 PDF 提取与预处理框架,核心理念是「Extract. Chunk. Embed. All in one line.」,即用一行代码完成 PDF 内容的提取、文本分块(Chunking)和向量化(Embedding),直接输出可供 RAG(检索增强生成)系统使用的结构化数据,消除了在 10+ 种 PDF 处理库之间反复切换的痛苦。
RAG 系统的高质量输出,高度依赖输入文档的「提取质量」——同样一份 PDF,用不同工具解析,表格可能变成乱码、公式可能消失、图表描述可能一片空白。业界常见的做法是:根据文档类型(如扫描件、含复杂表格的财报、多栏论文)手动选择不同的解析库。Marker 适合学术论文,Docling 擅长结构化文档,PaddleOCR 处理扫描件效果更好……光搞懂这 10+ 个库的 API 差异,就够喝一壶了。
PDFStract 的作者敏锐地捕捉到了这个碎片化痛点,提供了一个统一的抽象层:无论底层用哪个库,用户只需要调用同一个 API,切换成本从「学习 10 个库」降到了「改一个参数」。这一理念在工程上非常实用,尤其适合需要处理多种文档类型的企业级 RAG 场景。
PDFStract 目前内置支持 10+ 种提取引擎,覆盖不同场景:
| 引擎 | 适用场景 | 特点 |
|---|---|---|
| Marker | 学术论文、含公式/图表的复杂 PDF | 渲染质量高,基于深度学习 |
| Docling | 结构化文档(财报、合同、表格式文档) | 原生表格解析,布局保持好 |
| PyMuPDF4LLM | 普通文本 PDF | 速度快,依赖少 |
| MarkItDown | 快速预览提取 | 轻量级,无需 GPU |
| DeepSeekOCR | 扫描件、模糊文档 | 本地 OCR,无需 API Key |
| PaddleOCR | 中文文档、表格密集型 | 多语言支持强 |
| MinerU | 高精度工业级提取 | 需要单独下载模型,精度最高 |
| Unstructured | 通用文档 | 生态集成好 |
| Pytesseract | 基础 OCR | 无需网络,完全本地 |
PDFStract Web UI 界面:
图1:PDFStract Web UI 操作界面,支持拖拽上传和多引擎选择
提取出文本后,如何将长文档切分成适合 LLM context window 的小块,是 RAG 效果的关键。PDFStract 集成了 Chonkie 库,支持多种分块策略:
开发者可以通过参数无缝切换不同分块策略,无需修改业务代码。
提取+分块后的文本块,需要转成向量才能被向量数据库检索。PDFStract 支持 7+ 种 embedding 提供方:
这意味着:无论你是追求精度的云端 API 用户,还是注重隐私的本地部署玩家,PDFStract 都能覆盖。
PDFStract 提供了极大的灵活性,满足不同用户的需求:
CLI 模式:适合 DevOps 工程师批量处理文档。
pip install pdfstract
pdfstract convert report.pdf --library marker --output-format markdown
Python 库模式:适合开发者集成到自己的应用中。
from pdfstract import PDFStract
pdfstract = PDFStract()
result = pdfstract.convert('report.pdf', 'marker')
Web UI + API 模式:适合非技术用户和快速原型验证。
docker compose up # 一键启动
# 访问 http://localhost:8000
提取效果示例:
图2-3:PDFStract 提取效果对比,左为原始 PDF,右为提取后的 Markdown 输出
PDFStract 的代码架构非常值得学习。核心设计哲学是工厂模式(Factory Pattern)+ 插件化注册机制:
pdfstract/
├── api.py # 统一 Python API,对外暴露的 SDK
└── __init__.py # 包入口
services/
├── cli_factory.py # CLI 懒加载工厂(启动快)
├── ocrfactory.py # OCR 引擎工厂(完整加载所有转换器)
├── chunker_factory.py # 分块策略工厂
├── embeddings_factory.py # Embedding 提供方工厂
├── converters/ # 10+ 个转换器插件(各自独立)
│ ├── marker_converter.py
│ ├── docling_converter.py
│ └── ...
├── chunkers/ # 10+ 个分块策略插件
└── embeddings_wrappers/ # 7+ 个 embedding 封装插件
懒加载设计:CLI 模式使用 CLILazyFactory,只在你真正用到某个引擎时才加载对应库,避免了启动时所有依赖同时 import 的性能开销。Web/API 模式则用 OCRFactory 预加载所有引擎,以空间换时间。
FastAPI 服务层:Web 服务基于 FastAPI 构建,支持异步处理、文件上传(支持拖拽)、实时进度追踪(WebSocket/轮询)、结果下载(Markdown / JSON / HTML 格式)。
前端 Vue3 + Vite:Web UI 独立部署,通过 Nginx 提供静态资源,前后端分离架构清晰。
Docker 多阶段构建:后端 Dockerfile 基于 python:3.13-slim-bullseye,通过 uv 管理虚拟环境,分层缓存优化构建速度;前端基于 node:20-bullseye + Vite 构建,再以 nginx:alpine 精简交付。
需要客观指出 PDFStract 的一些局限:
当前 RAG 生态中,向量数据库(ChromaDB、Milvus)、LLM(OpenAI、Claude)和 Embedding 模型都有成熟工具,但文档预处理环节的工具链一直比较割裂。PDFStract 的出现,填补了这个中间层的空白。
从 GitHub 趋势看,该项目获得 153 stars(2025年7月),对于专注于 PDF/文档处理的垂直工具来说属于中上水平。其 Apache-2.0 开源许可也降低了企业引入的合规门槛。随着 RAG 在企业知识库、法律文档分析、医疗记录处理等场景的深化,文档预处理工具的需求会持续增长,PDFStract 有望成为这个细分领域的标杆项目。