Firecrawl 开源了文档转 Markdown 引擎 anydoc,采用统一文档模型,支持 14 种办公格式,转换速度中位 4.7ms,比竞品快一个数量级
AI 摘要
Firecrawl 开源了文档转 Markdown 引擎 anydoc,采用统一文档模型,支持 14 种办公格式,转换速度中位 4.7ms,比竞品快一个数量级。
推荐理由常规快讯,保留列表
原文
anydoc @firecrawl https://github.com/firecrawl/anydoc
Rust 语言编写,能把 Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV、PDF 等 14 种办公文档格式,统一转换为干净的 GitHub 风格 Markdown (GFM),中位转换速度不到 5 毫秒。
它同时提供 Rust crate、Node.js 包和 Python 包三种形态。没有 ML 模型、没有外部服务依赖,以单一引擎覆盖全部主流办公格式,并保证输出一致性。它同时是 Firecrawl 商业产品 Firecrawl Parse 的底层引擎。
# 性能与质量
官方 benchmark 用 100 份真实文档对比了 6 个竞品(libreoffice、unstructured、markitdown、pandoc、docling、mammoth),结果相当突出: · 速度:中位 4.7ms,比第二快的 mammoth(52.5ms)快一个数量级,比 LibreOffice(1129ms)快约 240 倍; · 格式覆盖:14/14,是唯一全覆盖的工具(LibreOffice 12/14,其余 8/14 或更少); · 质量:综合得分 80,除 EPUB 外在所有可比格式上均为最高。
# 核心架构决策是 "统一文档模型 + 单一序列化器"
原始字节 ├─► 格式探测(基于内容特征,而非扩展名) ├─► 各格式专属解析器(doc/docx/ppt/pptx/xls/xlsx/odt/rtf/epub/csv) │ └─► Document 共享模型(块、行内元素、表格、脚注、内嵌资源) │ └─► 唯一的 GFM 序列化器 → Markdown └─► PDF 单独走 pdf-inspector 库 → Markdown
这个设计带来两个实际收益: 1. 输出行为完全一致。无论是 2003 年的 .doc 还是昨天的 .pptx,表格转义、标题锚点、脚注处理都走同一条序列化路径。 2. 修复一次、处处生效。一个针对 docx 的表格转义修复,自动惠及 rtf、odt 等所有格式。这是典型的"漏斗式架构"红利,也是它能用较少代码(Rust 约 64 万字节,规模适中)覆盖 14 种格式的关键。
另外几个工程细节值得关注: · 内容级格式探测:通过 PDF 头、RTF 开组标记、OLE 流名、ZIP 包内 mimetype 等规范定义的特征判断格式,文件扩展名标错了也能正确转换;只有 CSV 这种无签名格式需要显式指定。 · 内嵌资产不丢失:图片以 alt 文本形式进入 Markdown,原始字节保留在文档模型中并标注 MIME 类型;带外链的图片直接转成标准 Markdown 图片语法。 · 绑定层做得克制:Node.js 侧跑在 libuv 线程池上不阻塞事件循环;Python 侧释放 GIL。TypeScript 类型和 Python stub 都随包发布。
讨论
暂无评论。