纯 Rust · 零运行时依赖 · 单个 ~29 MB 二进制

把任意文档变成
可引用的结构化数据

快、纯 Rust、面向 Agent 与 RAG 的多格式文档解析器。从 12+ 种格式抽取带位置的结构化内容——每个切块都带 page + bbox,可引用、可反查。

喜欢"快、零依赖"的基础设施? 一个 Star 能帮更多人发现它。

<10 ms
暖解析
~700
页 / 秒
12+
格式全进程内
~29 MB
单个二进制
100%
bbox 定位率
一个二进制 · 全部格式 · 无 JVM · 无 C++ · 无 Python
PDFDOCXHTML XLSXPPTXMarkdown CSVSRT / VTTLaTeX EMLPNG / JPEGAsciiDoc

能引用来源的检索而生

走"结构提取"快路径——解析 PDF 内容流拿坐标,而非把页面渲染成像素——所以输出逐字节确定,暖解析低于 10ms。

🦀

单个纯 Rust 二进制

~29 MB,零运行时依赖,暖解析 <10 ms(~700 页/s)。放服务器、笔记本或 CI 都行——没有环境要配。

📍

RAG 原生引用

每个切块带 page + bbox + 标题面包屑locate(x, y) 坐标反查,定位率 100%——答案能指回页面上的精确位置。

🔌

四接口一份输出

CLI · 库 · MCP(stdio) · REST——四个接口逐字节一致。直接接进 Agent。

🔍

进程内 OCR

--ocrtract ONNX(默认 PP-OCRv6 tiny)。数字文本页原样通过;OCR 路由页优先使用嵌入像素,否则按需渲染最终页面外观。首次使用按需拉取 ~7 MB。

🧠

内嵌模型,opt-in

合并格表结构、公式 → LaTeX、整页转写(UniRec-0.1B),外加 PP-DocLayoutV2 / DocLayout-YOLO 版面。一概不进二进制。

🛡️

默认安全

隐藏文本过滤(标注可审计,绝不静默删除)、zip-bomb / 页数守卫、页级复杂度画像。确定性核心独立成立。

bash
# 构建一次——没有工具链动物园,只要 cargo
$ cargo build --release

# 完整 IR:provenance + 坐标
$ docparse input.pdf -f json

# 干净 Markdown
$ docparse input.pdf -f markdown

# RAG 切块——page + bbox + 面包屑
$ docparse input.pdf -f chunks

# OCR 无机器可读文本的页面
$ docparse scan.pdf --ocr

一条命令即可上手

没有 JVM、没有 C++ 构建链、没有 Python 虚拟环境。构建二进制、指向文件、选输出格式即可。数字版 PDF 与其他所有格式零下载解析。

完整快速开始 →

直接接进你的 Agent

注册成 MCP 服务,或跑本地 REST 端点。同一个解析器、同一份逐字节一致的输出——挑适合你技术栈的接口。

接入文档 →
agent
# MCP 工具:parse_document / get_chunks / locate
$ claude mcp add docparse -- docparse mcp

# 本地 REST(绑 127.0.0.1)
$ docparse serve --port 8642
$ curl -F "file=@doc.pdf" \
    "http://127.0.0.1:8642/parse?format=chunks"

# Python / LangChain——零依赖薄客户端
from docparse_client.langchain import DocparseLoader
docs = DocparseLoader("paper.pdf").load()

人工真值打分

在 OmniDocBench(CVPR 2025)上用内嵌 UniRec 模型评测。文本与公式已接近论文级。

0.872
文本识别
--transcribe-model · 论文
0.874
公式 → LaTeX
--formula-model · 论文
0.810
表结构
--table-model · median 0.895

代理口径的"Overall" ≈ 75,落在管线工具档(Marker 78、Docling ~80–85)——而这一切都来自单个零依赖二进制。完整方法、边界与 leaderboard →

与同类对比

别人要靠 JVM、PDFium/Tesseract 的 C++ 依赖、或几个 GB 的 Python 环境才能做的事——这里是一个自包含的 Rust 二进制。

docparse-rsliteparseDoclingMarkItDown
部署纯 Rust ~29 MB,零依赖Rust + PDFium/Tesseract(C++)Python + 模型(GB 级)Python
PDF 引擎自研内容流解释器包 PDFium自研委托
确定性默认路径逐字节确定确定非严格确定
引用page+bbox 双向,100%每文本元素带 bbox元素级
输出JSON / MD / text / RAG 切块JSON / text / PNGMarkdown / JSONMarkdown
格式数12,全部进程内PDF 原生;其余靠外部15+20+
速度(born-digital)<10 ms / ~700 页/s秒级/页

坦诚说取舍:Docling 神经版面在最难版面上限更高;MarkItDown 长尾格式更多;非中英 OCR(RTL / 韩文)暂未覆盖。详细对比 →

一个不欠 AI 任何东西的核心

Cargo workspace 17 个 crate。确定性核心独立成立;神经模型只在值得的地方外接。

🏗️ 设计即确定

  • core 不依赖任何 PDF 库——阅读顺序与输出对所有格式通用;新增格式只需一个 trait + 一行注册。
  • 自研 PDF 内容流解释器——图形/文本矩阵状态机,发射带坐标的切块。
  • 独立实现的字体层(ToUnicode CMap / AFM / Encoding),只把 veraPDF 当算法参考——不拷代码。
  • 页级 rayon 并行;同输入 → 逐字节一致输出。

🧩 模型在边界上

  • 模型永不进核心——经 Enhancer 边界按页外接。
  • 只有被路由到模型的难页才会被渲染——按需,纯 Rust。
  • 每个模型产出都带 source 标签 + 降级置信度,来源始终可追溯。
  • 所有可选模型均为 Apache-2.0,作为外部文件拉取——绝不进二进制。

如果这正是你一直想要的解析器,
给它一个 Star

开源、Apache-2.0、纯 Rust。Star 能帮更多人发现它——也是对我们继续推进的鼓励。