Rust 终于有能打的文档解析了?

做 RAG 应用的人都会撞上同一个问题。PDF、Word、扫描件要喂给 LLM,第一步就是把这些东西变成文本。我在选型的时候发现,Unstructured、Docling、MinerU 全是 Python 系,Rust 生态只有 pdf-extract、lopdf 这类单格式库,没有一站式方案。后来看到 xberg,Rust 核心、101 种格式、371 种语言的代码智能、15 种语言绑定,还自带 MCP server,就把它装下来实测了一周。

先把结论放前面,Rust 项目用它省心,Python 项目先别急着迁。

xberg 是什么

xberg 是一个 Rust 写的文档解析库。把 PDF、Word、图片、网页、代码文件丢给它,它给你吐干净的文本和结构化数据,表格、实体、embedding 都有,主要就是给 LLM 应用喂料的。crates.io 上的定位是 document intelligence,101 种格式、371 种语言的代码智能。

它解决的核心问题是多格式一个入口。以前一个 PDF 一个库,Office 又换一个,代码文件还得再找解析器,凑起来是一堆散件。xberg 把所有格式统一收进一套 API,用语言无关的插件体系按格式挑 extractor。这个设计比一个函数硬啃所有格式实在,也比自己拼五六家库省心。

架构一句话就能说清。核心是 Rust,其它都是绑定。

核心模块做 extract 编排,MIME 检测覆盖 115 种扩展名,按格式优先级挑 extractor。插件体系是语言无关的,PDF、图片、Office、邮件各走各的提取器。OCR 后端有 Tesseract、PaddleOCR 和 Candle 系的 VLM,按需切换。绑定层覆盖 Python、TS(NAPI-RS)、WASM、Java、Go、Elixir 等 15 种,WASM 性能约为原生 60%-80%,不是所有绑定体验一致。接入方式有库 API、CLI、REST API、MCP server。自带 MCP server 这一点,说明它是冲着 AI Agent 场景设计的。

这些数字我对照 crates.io 核对了一遍,101 种格式、115 种扩展名、371 种语言、15 种绑定,当前版本 1.0.14。

第一个坑,默认特性连 PDF 都打不开

建个项目,cargo add xberg,用默认特性直接跑这段探针代码

rust 复制代码
use xberg::{extract, ExtractInput, ExtractionConfig};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let config = ExtractionConfig::default();
    let out = extract(ExtractInput::from_uri("document.pdf"), &config).await?;
    println!("{}", out.results[0].content);
    Ok(())
}

Markdown、CSV、JSON 开箱即用,中文和表格都提取得干净。换成 PDF 就报错,错误信息是这样

css 复制代码
ERROR: UnsupportedFormat("application/pdf")

101 种格式是特性开关,不是默认全开。PDF 和 HTML 都要手动开 feature,Cargo.toml 里这样写

toml 复制代码
xberg = { version = "1.0.14", features = ["pdf", "html"] }

第二个坑,pdf 特性编译断链

开 pdf 特性之后构建直接失败,报错信息长这样

vbnet 复制代码
error: failed to select a version for the requirement `fax = "^0.3"`
candidate versions found which didn't match: 0.2.7, 0.2.6, ...
required by package `pdf_oxide v0.3.77`

xberg 的 PDF 能力基于 pdf_oxide 0.3.77,它依赖 fax ^0.3,而 fax 0.3.0 是 2026 年 7 月 13 日才发布的,本地 cargo 索引缓存里只有 0.2.x。跑一次 cargo update 更新索引,编译就过了。整个编译约 6 分钟,产物 28.4MB。新项目第一次跑大概率踩这个,记一笔。

PDF 解析质量,内容完整,结构打平

PDF 提取质量我拿 arXiv 的 Attention Is All You Need 试的,5 页文本层论文。

耗时 0.302 秒,输出 39.6KB、809 行文本。内容完整性没得说,Multi-Head、positional encoding、BLEU、softmax 这些关键词全部命中,正文、公式叙述、表标题都在。结构保真一般。没有 Markdown 标题层级,表格没有还原成表格,Table 1 的标题和叙述在,表格数据被打平成文本流,数学符号的下标混在句子里。

同一批样本文档里,Markdown 输入的结构保真度高很多,标题、表格、代码块全部保留。HTML 输入内容正确,结构也简化成了文本流。

对 RAG 场景,文本层 PDF 提取到这个程度够用,LLM 吃的是文本,不是版面。你要表格结构还原、版面分析,那还不是 xberg 现在的强项。

和 Python 系三件套比

下面这张表,xberg 一侧是我的实测,Python 系三件套是公开资料,官方 benchmark 单独标注。六行六列,先看整体再逐列说

维度 xberg 1.0.14 Docling Unstructured MinerU
安装与依赖体积 单二进制约 28MB(实测) pip 安装,torch 级依赖,几百 MB pip 安装,torch 和 tesseract 等 pip 安装,torch 和 PaddleOCR 等
解析质量(文本层 PDF) 内容完整,结构打平(实测) 版面分析强,输出 Markdown 和 JSON 分区提取,元素级输出 版面还原强,公式表格识别好
性能与速度 0.302s 提取 5 页论文(实测) 官方宣称领先,自报数据打折扣看 官方宣称领先,自报数据打折扣看 官方宣称领先,自报数据打折扣看
中文支持 中文文本提取正确(实测),OCR 依赖后端 中文 OCR 可用 中文支持一般 中文 OCR 强(PaddleOCR)
接入方式 库、CLI、REST、MCP 库、CLI、REST 库、CLI、API 库、CLI
许可证与商业背景 MIT,xberg-io 有 Enterprise SDK MIT(IBM) Apache 2.0,有商业版 Apache 2.0

每个维度单独说。

安装与依赖体积。xberg 是 Rust crate,编译完一个二进制。Python 系三件套动辄 torch 级依赖,几百 MB 起步,还要管 Python 环境和版本兼容。这是 xberg 最大的实际优势。

解析质量。xberg 对文本层 PDF 的内容提取没得说,表格和版面还原目前是短板,这是我实测出来的。Docling 和 MinerU 的版面分析是它们的老本行,输出结构化程度更高。

性能。我自测 0.302 秒一篇 5 页论文,没有三方案同机对比。三家官方都宣称自己最快,这种自报数据我一律打折扣看,你也一样。

中文。我的中文样本文档提取全部正确。OCR 的中文识别质量取决于后端,PaddleOCR 系在这一块有积累。

接入方式。只有 xberg 同时提供 MCP server,对 Agent 集成是实打实省事。

许可证。xberg 是 MIT,背后是商业公司 xberg-io,提供 Enterprise SDK,开源是获客入口。Docling 是 IBM 的,Unstructured 有商业版,MinerU 是 Apache 2.0。选型时把开源可用和长期依赖分开评估。

商业背景,说人话

xberg-io 提供 Enterprise SDK,仓库是 MIT。这件事带来两个直接后果。社区版免费可用,但 roadmap 大概率服务于商业目标,核心格式的解析质量会优先保,冷门格式的维护优先级要你自己盯。任何商业开源项目都这样,不用当成黑点,只是评估时要独立,解析质量和许可证风险分开算,别因为 MIT 就默认纯社区驱动,也别因为商业公司就一票否决。

什么场景用谁

用 xberg 的场景有四类。Rust 项目,因为和你的技术栈同构,不引入第二门运行时。想省 Python 运行时,省去专门维护一个 Python 服务。要 MCP 接入,因为 Agent 直接调,省掉中间层。性能敏感,因为原生编译产物,启动和吞吐都有优势。

留 Python 系的场景有三类。全 Python 团队,别为解析器引入 Rust 工具链。要深度学习文档理解,提取之外还要版面、语义结构。要 Docling 级别的版面分析精度,xberg 现在给不了。

中文 OCR 深度定制也算一类,Python 系后端选择更多,这个看需求再定。

总结

这一期把 Rust 生态有没有能打的文档解析这个问题的答案给出来了。xberg 能用,它占的是 Rust 原生、文本提取、Agent 集成这个位置,表格结构还原和版面分析还差一截,OCR 依赖链要自己评估。

下一期我用 xberg 搭一条完整的 PDF→Markdown→Embedding 的 RAG 管线,把提取、清洗、分块、检索跑通。

相关推荐
cui_ruicheng27 分钟前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
飞哥数智坊1 小时前
直播半小时,我聊了聊 Agent 最常见的 3 个疑问
人工智能
ggb喔1 小时前
AI 原生攻防时代:2026 年渗透测试与逆向开发的范式重构
人工智能·重构
宸津-代码粉碎机1 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
克里斯蒂亚诺更新2 小时前
机器学习库sklearn的主要任务
人工智能·机器学习·sklearn
先跑起来再说2 小时前
Qavor:一个能跑、能观测、能扩展的开源 AI Agent 工作台
人工智能·开源
Mr数据杨2 小时前
从文本特征到回归建模 Syllable Counting Model 实战解析
人工智能·数据分析·kaggle竞赛
HIT_Weston2 小时前
201、【Agent】【OpenCode】JS 语法:setTimeout 七种常用形式
人工智能·agent·opencode
维基框架2 小时前
萨尔瓦多学校免费上Grok 没账单的AI怎么限流
人工智能
敢敢是只喵i2 小时前
给现有业务系统接 AI 助手,入口怎么选?网页聊天、自动化任务与本地 Agent 对比
运维·人工智能·ai·开源·自动化·安全架构