PageSift 最早是我另一个项目 AiSeek(证据型研究平台)的抓取层:总得有个东西负责把网页和文档抓回来、变成 LLM 流水线能直接用的干净 Markdown。它后来长成了一个自托管的网页抓取/爬取/文档解析引擎——Firecrawl 与 Jina 兼容的 API、MCP 服务、Python/Node SDK,一个 Rust 二进制。
整个 1.x 系列我一直在做同一件事:哪个部件长成了通用能力,就把它切出去,给它独立的仓库、独立的版本、MIT 许可证。PageSift 1.4 把这场拆分收了尾,并且装上了拆分一直在为之腾地方的那个子系统。
拆分完成。 第一波(1.2.7)把 base64、PDF、HTML、content 四个 crate 变成了独立库的薄壳;第二波(1.4.0)把剩下三个也拆了:pagesift-office → yolowdoc、pagesift-syntax → yolowsyntax、pagesift-compress → yolowzstd。现在引擎是七个独立版本管理的开源项目的组合体;PageSift 本体也自 1.3 起改了 Apache-2.0(此前是 AGPL)。
DataGraph。 新 crate pagesift-graph(约 4,000 行)就是腾地方的目的。普通爬虫返回文本,然后把一切都忘掉;DataGraph 留底单:
sku 这类主体键聚合)跨来源聚成事实簇,来源之间打架时生成冲突记录:两个变体、两段原文摘录、优先采信哪一个及其理由。同一个商品,一个页面标 $10、另一个标 $12,从此不再是沉默的数据质量 bug,而是一条可查询的事实。接口与 PageSift 本体全线一致:CLI(scrape --graph、crawl --graph、graph inspect)、HTTP API(scrape 响应里的 graph 切片,以及 /v2/graph/history、/v2/graph/conflicts)、MCP 工具 pagesift_graph_query、Python 与 Node SDK。
LLM 流水线要的不只是文本。它要知道一条主张从哪来、跟什么矛盾、哪个版本是现行。DataGraph 补的就是这一层。
运行时分发的 SIMD(AVX2/NEON)Base64 编解码,零运行时依赖,带流式与 data URL API。0.3 新增短输入专用内核与 hash 表尾部融合:8 KiB 到 1 MiB 约 20.4 GB/s,短载荷(8–64 字节)比 0.2 快 1.5–2.8 倍。真实流水线里占大头的是 token、哈希、内嵌小块这类短输入,所以功夫下在这里。
cargo add yolow64 · GitHub · crates.io
自己解析格式的 PDF→Markdown 库加 OCR 引擎:不用 Poppler、不用 MuPDF,没有要链接的东西。workspace 里还带 GPU 加速的 OCR(PP-OCRv6)。README 基准(i7-10700):原生文本型文档 1,900 页/秒。这个组件给整个家族立下最硬的一条规矩:凡是恶意文件能影响的内存分配,先过预算、再分配。
cargo add yolowpdf · GitHub · crates.io
两个 crate:yolowhtml-dom 是零拷贝 arena HTML5 解析器(连续的 Vec<Node> + u32 节点 ID、CSS 选择器),yolowhtml 在同一趟解析里做正文抽取,一趟出 Markdown、元数据与发布日期。README 测试集上:Markdown 结构 F1 在 15 个页面类别上 1.000,发布日期抽取覆盖 20 种语言、F1 0.945。两个 crate 都是 #![forbid(unsafe_code)]。
cargo add yolowhtml · GitHub · crates.io
照 RFC 8878 规范从零写的 Zstandard 编解码:零依赖、#![forbid(unsafe_code)],多核编解码、输出标准拼接帧,与官方 zstd CLI 的互操作有测试兜底。它瞄准的是小记录这一端:64 字节载荷上解码 3,257 MB/s(C 版 libzstd 的 1.6 倍)、编码 264 MB/s(4.1 倍)(i7-10700)——PageSift 的缓存记录正是这个形状。明确写明的缺口:暂不支持字典。
cargo add yolowzstd · GitHub · crates.io
tree-sitter 文法的纯 Rust 运行时:把 C 运行时用 Rust 重写,41 门语言的解析表转换后内嵌——合计 6.22 MiB,用 yolowzstd(它唯一的运行时依赖)压缩、按语言懒加载。32 门带符号的语言可抽代码大纲。无 C FFI、#![forbid(unsafe_code)]。明确写明的限制:无 Query DSL、无增量重解析。
cargo add yolowsyntax · GitHub · crates.io
一个 convert(bytes, format, opts) 把文档转成 Markdown:Office(DOCX/XLSX/PPTX,外加老 DOC/XLS/PPT 与 XLSB)、OpenDocument、RTF、WordPerfect、HWP/HWPX、电子书(EPUB/MOBI/FB2)、邮件(EML/MBOX/MSG)、归档(ZIP/TAR/7Z/GZ/BZ2/XZ,解压器也是纯 Rust)、SQLite、dBASE、CSV、Jupyter 笔记本。各格式的解析都做得深——数据透视表、图表、公式都有——并且开工之前先过 Limits 预算检查。
cargo add yolowdoc · GitHub · crates.io
家族是个小格子,不是一堆杂物:PageSift 依赖全部六个库;yolowsyntax 依赖 yolowzstd;yolowdoc 建在两者之上;yolowpdf 用 yolow64。规矩全员共享——纯 Rust、无 C 依赖、库内禁用 unsafe、分配之前先强制过资源预算。因为这一家子都是靠吃不可信输入过活的。
PageSift 是引擎,这六个是它的器官,现在各自独立生活:每个都能脱离其他几个单独用,每个都在 crates.io 上以 MIT 发布,PageSift 本体是 Apache-2.0。
链接:PageSift · yolow64 · yolowpdf · yolowhtml · yolowzstd · yolowsyntax · yolowdoc
欢迎上手、欢迎弄坏、欢迎告诉我坏在哪——来自其他机器的 issue 和基准数据,是我能收到的最有用的反馈。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。