Doctra
PDF/DOCX文档一键转Markdown/Excel/JSON,支持VLM结构化提取和扫描件图像修
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PDF/DOCX文档一键转Markdown/Excel/JSON,支持VLM结构化提取和扫描件图像修
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Doctra 支持 PDF、DOCX、图片扫描件等多种格式的结构化解析
想象一个场景:你手里有一份50页的财务报告 PDF,里面既有文字段落,也有跨页表格,还有折角扫描导致的变形。用户需要你把所有内容转成结构化数据,供 AI 分析使用——传统方法是什么?用 OCR 工具提取文字,用 Excel 手动重建表格,用正则表达式提取关键数据。一个人忙活大半天,结果还不一定准确。
Doctra 正是为解决这个痛点而生。这是一个由独立开发者 Adem Boukhris 创建的 Python 文档解析库,通过组合 PaddleOCR 布局检测、PyMuPDF 文本提取、图像修复(DocRes)和多模态大模型(VLM)四大能力,实现一键将任意 PDF 转换为 Markdown、Excel 和结构化 JSON。项目在 GitHub 已有 211 颗 Stars,并在 Hugging Face 上托管了可在线体验的演示空间。
文档解析(Document Parsing)一直是 AI 落地中最繁琐的前处理环节。RAG(检索增强生成)系统需要将 PDF 转化为文本,财务分析需要从扫描件中提取表格数据,合同审核需要识别手写批注——这些场景的共同问题是:PDF 不是为程序读取设计的。
Adem Boukhris 作为独立开发者,在文档解析实验室(Documents-Parsing-Lab)中系统测试过数十种 OCR 和文档解析方案后,决定将经验沉淀为一个统一框架。他在 GitHub Discussions 中提到,设计初衷是让研究文档解析的人不需要重复造轮子——Doctra 正是这一理念的产物。项目采用 Apache 2.0 开源许可证,代码结构清晰,对学术和商业场景都很友好。
Doctra 的架构设计值得细说。作者没有把 OCR、布局检测、VLM 输出混在一起,而是采用了模块化插件架构,每一层都可以独立替换:
第一层:布局检测(Layout Detection)
基于 PaddleOCR PP-DocLayout 系列模型,自动识别 PDF 中的段落、标题、表格、图片、脚注等区域。这一步决定了后续处理的精度——如果布局识别错了,表格就会被打散成乱序文字。PP-DocLayout_plus-L 提供高精度版,适合复杂文档。
第二层:文字识别(OCR Engine)
支持两种 OCR 引擎,用户可以按需切换:
第三层:图像修复(DocRes Image Restoration)
扫描质量不佳的文档(折角、阴影、过曝、模糊)直接 OCR 效果很差。Doctra 的 EnhancedPDFParser 集成了 DocRes 模型,提供 6 种修复任务:去扭曲(dewarping)、去阴影(deshadowing)、去模糊(deblurring)、外观增强(appearance)、二值化(binarization)和端到端修复(end2end)。修复后 OCR 准确率显著提升。
第四层:VLM 结构化提取(Vision Language Model)
这是 Doctra 与传统 OCR 工具拉开差距的核心功能。通过 VLMStructuredExtractor 接入多款多模态大模型:
Doctra 提供 6 个专用 Parser,覆盖主流文档解析场景:
| 组件 | 功能 | 典型场景 |
|---|---|---|
| StructuredPDFParser | 通用 PDF 解析,提取全文+图片+布局 | 通用文档转换 |
| EnhancedPDFParser | 继承前者 + DocRes 图像修复 | 扫描件、老旧档案 |
| ChartTablePDFParser | 仅提取图表/表格,支持 VLM 结构化 | 数据分析、前端展示 |
| PaddleOCRVLPDFParser | PaddleOCRVL 端到端解析 | 高精度复杂文档 |
| StructuredDOCXParser | Word 文档结构化解析 | Office 文档转换 |
| DocResEngine | 独立图像修复引擎 | 预处理任何图像 |
图2:Doctra 项目 Logo
输出格式方面,doctra/exporters/ 目录包含专门的导出模块:Markdown 书写器(保留标题层级)、Excel 写入器(重建表格)、HTML 书写器和图片保存器。用户可以根据下游需求选择最适合的输出格式。
Doctra 的 Gradio UI(doctra/ui/app.py)提供了完整的图形化界面,分为 5 个功能标签页:
Gradio UI 采用模块化设计(full_parse_ui.py、tables_charts_ui.py、docres_ui.py 等独立文件),每个标签页有自己的状态管理和事件处理器,便于维护和扩展。UI 支持深色主题、自定义 CSS,并通过 ui_helpers.py 统一样式常量。
从 PyPI 安装非常简单:pip install doctra,代码层面体验良好。但系统依赖是主要门槛:
Doctra 当前没有提供 Dockerfile,这是最大的部署痛点。理想情况下,一个 docker-compose.yml 可以一键解决所有依赖隔离问题。但即便如此,对于有 Docker 基础的用户,手动配置也不算困难——作者提供了详细的系统依赖安装说明,覆盖了 Ubuntu、macOS、Windows 三大平台。
Web UI 启动方式:python -m doctra.ui.app,无需 API Key 即可使用基础 OCR 功能。接入 VLM(如 GPT-4V)需要配置相应的 API Key,代码中通过环境变量或参数传入,安全性需用户自行保障。
Doctra 还提供了命令行接口:doctra 命令。CLI 封装在 doctra/cli/main.py 中,适合集成到数据管道或自动化脚本中,实现批量文档转换。这对于需要处理大量文档的企业场景尤为重要——比如每天处理上千份合同,或者周期性归档扫描档案。
没有任何工具是银弹,Doctra 也不例外:
对中文文档的支持:当前默认语言为英文(lang="eng"),中文 OCR 需要额外配置 Tesseract 语言包,且 VLM 对中文表格结构的理解效果因模型而异。中文用户在使用前需要做额外测试。
VLM API 成本:调用 GPT-4V 等商业模型处理大量文档会产生 API 费用。Doctra 虽然支持 Ollama 本地模型,但本地 VLM 的精度通常低于云端模型,需要在成本和精度间做权衡。
内存占用:PaddleOCR + PaddlePaddle + DocRes + Gradio 全家桶同时加载,内存占用不低。无 GPU 的机器上处理大文档(100页以上)可能较慢。
Dockerfile 缺失:如前所述,缺少容器化支持增加了部署复杂度,限制了其在云原生环境中的使用。
Doctra 所在的文档解析赛道,2025 年竞争极为激烈。IBM 的 Docling、Anthropic 的 Claude 文档解析、LlamaIndex 的 LlamaParse、LlamaCloud 的 Parseur 都在争夺同一批用户。Doctra 的差异化在于:完全开源 + Gradio 零代码体验 + 灵活的模块化架构,特别适合需要深度定制的研究者和开发者。
从项目增长看,Doctra 的 Stars 增长曲线与文档解析需求的爆发高度吻合。随着 RAG 系统在企业 AI 落地中的普及,将非结构化文档转化为 AI-Ready 数据的前处理工具市场还在持续扩大。Doctra 若能补齐 Docker 支持和中文优化,有望在开源文档解析工具中占据更稳固的位置。
一句话总结:Doctra 是一款面向 AI 开发者的高质量文档解析工具包,通过模块化设计将 OCR、布局检测、图像修复和 VLM 有机整合,支持 PDF/DOCX 多格式输出,配有零代码 Gradio 界面,适合从研究原型到生产管道的多种场景。