
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载导读本文聚焦于 Xberg 的pages配置项——一个控制 PDF 等文档页面级提取行为的核心开关。通过extract_pages与insert_page_markers两个字段你可以让提取结果按页组织、并在正文中插入可识别的分页标记从而为 RAG 检索、逐页校对、章节定位等场景提供稳定的页面锚点。读完本文你将掌握在 Elixir 中通过Xberg.extract/Xberg.extract_async传 JSON 配置启用页面提取、理解底层配置结构与自动规范化规则并能在真实测试用例与源码中验证行为。什么是 pages 配置两个开关 一个格式模板在 Xberg 的提取配置中pages是一组独立于chunking、ocr等模块的页面处理选项。它位于顶层ExtractionConfig.pages字段类型为OptionPageConfig为None时页面跟踪完全关闭源码定义见 crates/xberg/src/core/config/page.rs字段类型默认值作用extract_pagesboolfalse是否把每一页提取为独立的数组元素写入结果中的pages字段ExtractedDocument.pagesinsert_page_markersboolfalse是否在主内容字符串中插入分页标记marker_formatstring\n\n!-- PAGE {page_num} --\n\n页面标记的模板格式{page_num}是页码占位符会被替换为实际页码默认值在PageConfig::default()中由源码直接确认extract_pages: false、insert_page_markers: false、marker_format同上并有对应的单元测试test_page_config_default锁定page.rs#L59-L69。也就是说不传pages配置时页面既不会被独立提取正文中也不会有任何分页标记。Elixir 实战一行 JSON 配置启用页面提取在 Elixir 绑定中配置通过config参数以 JSON 字符串形式传入Xberg.extract或Xberg.extract_async。官方契约用例e2e/elixir/test/contract_test.exs#L27052-L27064展示了两者同时启用的完整写法input_value %Xberg.ExtractInput{kind: uri, uri: https://example.com/pdf/fake_memo.pdf} result Xberg.extract_async(input_value, {\pages\:{\extract_pages\:true,\insert_page_markers\:true}}) IO.inspect(Enum.at(result.results, 0).mime_type) IO.inspect(Enum.at(result.results, 0).content)等价于使用同步接口{:ok, result} Xberg.extract( input: %Xberg.ExtractInput{kind: uri, uri: https://example.com/pdf/fake_memo.pdf}, config: {\pages\:{\extract_pages\:true,\insert_page_markers\:true}} ) # 断言 MIME 类型为 PDF assert Enum.at(result.results, 0).mime_type application/pdf # 正文长度 10 assert byte_size(Enum.at(result.results, 0).content) 10 # 正文中应包含页面标记文本 PAGE assert String.contains?(to_string(Enum.at(result.results, 0).content), PAGE)关键要点input的kind可以是:uri、:bytes等配合config一起调用config是 JSON 字符串嵌套字段用点号语义逐层解析此处为pages.extract_pages、pages.insert_page_markers。断言表明启用insert_page_markers后正文content中会出现 PAGE 字样——这是默认标记格式!-- PAGE {page_num} --的体现。该用例同时存在于跨语言契约文件 fixtures/contract/config_pages.json其断言与 Elixir 版一一对应results[0].mime_type application/pdf、content长度 ≥ 10、包含PAGE说明页面配置的行为是所有语言绑定共享的同一契约。底层原理一extract_pages 如何产出独立页面数组extract_pages: true时提取结果会额外携带按页组织的独立内容。从 crates/xberg/src/core/config/extraction/core.rs#L168-L170 可以看到pages字段在ExtractionConfig中的位置与注释Page extraction configuration (None no page tracking)。在 PDF 提取路径中crates/xberg/src/extractors/pdf/extraction.rs#L425-L437 展示了实际接线逻辑当层次结构hierarchy开启而pages.extract_pages未被显式打开时代码会自动把extract_pages置为true——因为层级结构输出需要页面边界信息才能给每个元素分配正确的页码。更值得关注的是配置的自动规范化规则见 crates/xberg/src/core/config/extraction/core.rs#L890-L917normalized()方法当result_format为ElementBased基于元素的结果格式而页面提取未开启时会自动启用extract_pages——否则所有元素都会被错误地标记为page_number 1当配置了chunking文本分块而页面提取未开启时同样会自动启用extract_pages——因为分块器需要页面边界来给每个 chunk 分配正确的页码。这意味着你只需专注于自己的核心配置Xberg 会在需要页面信息的场景下自动补齐extract_pages避免输出全是一页的错误结果。底层原理二insert_page_markers 与 marker_format 模板insert_page_markers: true时提取器会在正文内容中按页插入标记。标记格式由marker_format控制占位符{page_num}会被替换为实际页码默认格式\n\n!-- PAGE {page_num} --\n\n采用 HTML 注释形式对绝大多数下游解析器包括 Markdown 渲染、LLM 提示构造透明无副作用。源码 page.rs#L49-L57 中还有一个容易被忽略的细节——marker_line_regex()它会把marker_format中每一处{page_num}替换为\d并整体转义生成一个整行即标记的正则。该正则的作用是识别正文中已渲染的标记行让各格式渲染器如 Markdown 渲染器将标记行原样透传、不当作正文改写。这也解释了为什么标记默认带前后换行保证它独占一行、可被正则精确匹配。如果你希望使用自己的标记格式例如无 HTML 注释的纯文本可传入{pages:{extract_pages:true,insert_page_markers:true,marker_format:\n PAGE {page_num} \n}}注意marker_format中{page_num}是必需的占位符且marker_line_regex假定每个标记独占一行^...$锚定因此自定义格式建议保留行首行尾的换行。页面配置与分块chunking的协同页面提取通常不是孤立使用的。常见的组合场景是页面 分块先按页组织内容再让分块器基于页面边界切块使每个 chunk 都能携带准确的first_page/last_page元数据。这一点在 page.rs 模块注释 中有明确说明Page range tracking in chunk metadata (first_page/last_page) is automatically enabled when page boundaries are available and chunking is configured.而 crates/xberg/src/core/split.rs#L89 中extract_pages true的赋值进一步印证分块管线在内部解析页面配置并强制要求页面提取开启以保证 chunk 的页码元数据可用。因此当你做 RAG 检索增强检索结果回指到具体页码时推荐同时开启extract_pages与chunking。验证方法从契约文件到端到端测试如果你想在本地复现或验证上述行为仓库提供了两条路径跨语言契约无需服务器查看 fixtures/contract/config_pages.json。它定义了config{pages:{extract_pages:true,insert_page_markers:true}}、mock 响应/pdf/fake_memo.pdf返回../test_documents/pdf/fake_memo.pdf与三条断言。fixtures/contract目录下的契约 JSON 由 Alef 自动生成各语言绑定代码是所有语言的单一事实来源。Elixir 端到端测试运行 e2e/elixir/test/contract_test.exs 中的config_pagesdescribe 块。它通过 mock 服务器提供 PDF 文件断言 MIME 类型为application/pdf、正文非空且包含PAGE。你可以在本地启动 mock 服务器参考 scripts/e2e/run-with-mock-server.sh再执行对应测试用例。小结pages配置是 Xberg 中页面意识page awareness的最小入口extract_pages决定页面是否独立成数组insert_page_markers决定正文是否带有可解析的分页标记marker_format决定标记的呈现模板。本文给出的 Elixir 调用方式可直接复制运行结合normalized()的自动规范化逻辑你甚至可以在元素级结果或分块场景下无感获得正确的页码归属。对于任何需要逐页定位、逐页处理或多页文档检索增强的应用这一配置都是必选项。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐Xberg 的 PageConfigPDF 分页提取与页面标记配置实战指南CXberg 的 PageConfigPDF 分页提取与页面标记配置实战指南C 导读 本文以 Xberg 仓库中的契约测试文档 config_pages.后端AI 应用NLP使用 xberg 的 PageConfig 提取分页内容页面数组与页面标记Page Markers实战指南使用 xberg 的 PageConfig 提取分页内容页面数组与页面标记Page Markers实战指南 导读 在从多页 PDF、扫描件或排版复杂的文档后端AI 应用NLPXberg 页面级抽取与页面标记配置实战extract_pages / insert_page_markers 契约解析与实现原理Xberg 页面级抽取与页面标记配置实战extract_pages / insert_page_markers 契约解析与实现原理 本篇技术指南围绕 Xber后端AI 应用NLP上一篇纯强化学习突破DeepSeek-R1-Zero开源推理模型训练范式重构下一篇5分钟掌握FanControl风扇控制软件完整中文使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考