一个二进制 · 全部格式 · 无 JVM · 无 C++ · 无 Python
PDF DOCX HTML XLSX PPTX Markdown CSV SRT / VTT LaTeX EML PNG / JPEG AsciiDoc

## 为能引用来源的检索而生

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

🦀

### 单个纯 Rust 二进制

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

📍

### RAG 原生引用

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

🔌

### 四接口一份输出

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

🔍

### 进程内 OCR

`--ocr` 走 `tract` 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-rs | liteparse | Docling | MarkItDown
--- | --- | --- | --- | ---
部署 | 纯 Rust ~29 MB，零依赖 | Rust + PDFium/Tesseract（C++） | Python + 模型（GB 级） | Python
PDF 引擎 | 自研内容流解释器 | 包 PDFium | 自研 | 委托
确定性 | 默认路径逐字节确定 | 确定 | 非严格 | 确定
引用 | page+bbox 双向，100% | 每文本元素带 bbox | 元素级 | 无
输出 | JSON / MD / text / RAG 切块 | JSON / text / PNG | Markdown / JSON | Markdown
格式数 | 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 能帮更多人发现它——也是对我们继续推进的鼓励。

★ 去 GitHub 点 Star 阅读文档 →