首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一个引擎,拆成了七个开源项目:PageSift 1.4 与 yolow 家族

一个引擎,拆成了七个开源项目:PageSift 1.4 与 yolow 家族

原创
作者头像
用户12863179
发布于 2026-11-14 10:13:22
发布于 2026-11-14 10:13:22
50
举报

PageSift 最早是我另一个项目 AiSeek(证据型研究平台)的抓取层:总得有个东西负责把网页和文档抓回来、变成 LLM 流水线能直接用的干净 Markdown。它后来长成了一个自托管的网页抓取/爬取/文档解析引擎——Firecrawl 与 Jina 兼容的 API、MCP 服务、Python/Node SDK,一个 Rust 二进制。

整个 1.x 系列我一直在做同一件事:哪个部件长成了通用能力,就把它切出去,给它独立的仓库、独立的版本、MIT 许可证。PageSift 1.4 把这场拆分收了尾,并且装上了拆分一直在为之腾地方的那个子系统。

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 留底单:

  • 每次抓取成为一个节点,文档之间的链接成为引用;
  • 来源谱系以边的形式记录:重定向链、canonical 别名簇、附件与它的父文档;
  • 同一资源重复抓取,长出的是版本谱系,而不是一次覆盖;
  • 抽出的字段带证据跨度——指回源文档的字节偏移,任何一条主张都能指回它出自的那段原文;
  • 关于同一实体的主张(用 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 补的就是这一层。

六个组件

yolow64 0.3.0 — Base64,约 20 GB/s

运行时分发的 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

yolowpdf 0.1.2 — PDF 转 Markdown,不依赖 C 库

自己解析格式的 PDF→Markdown 库加 OCR 引擎:不用 Poppler、不用 MuPDF,没有要链接的东西。workspace 里还带 GPU 加速的 OCR(PP-OCRv6)。README 基准(i7-10700):原生文本型文档 1,900 页/秒。这个组件给整个家族立下最硬的一条规矩:凡是恶意文件能影响的内存分配,先过预算、再分配。

cargo add yolowpdf · GitHub · crates.io

yolowhtml 0.1.0 — arena HTML5 解析与抽取

两个 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

yolowzstd 0.1.2 — 纯 Rust 的 Zstandard

照 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

yolowsyntax 0.1.2 — tree-sitter,不要 C

tree-sitter 文法的纯 Rust 运行时:把 C 运行时用 Rust 重写,41 门语言的解析表转换后内嵌——合计 6.22 MiB,用 yolowzstd(它唯一的运行时依赖)压缩、按语言懒加载。32 门带符号的语言可抽代码大纲。无 C FFI、#![forbid(unsafe_code)]。明确写明的限制:无 Query DSL、无增量重解析。

cargo add yolowsyntax · GitHub · crates.io

yolowdoc 0.1.1 — 全格式文档,一个入口

一个 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 删除。

目录
  • PageSift 1.4
  • 六个组件
    • yolow64 0.3.0 — Base64,约 20 GB/s
    • yolowpdf 0.1.2 — PDF 转 Markdown,不依赖 C 库
    • yolowhtml 0.1.0 — arena HTML5 解析与抽取
    • yolowzstd 0.1.2 — 纯 Rust 的 Zstandard
    • yolowsyntax 0.1.2 — tree-sitter,不要 C
    • yolowdoc 0.1.1 — 全格式文档,一个入口
  • 它们怎么拼在一起
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档