Xberg PHP 批量 URI 文档提取实战:extractBatch 接口的用法、契约与验证
后端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 官方 PHP 契约测试片段api_extract_batch_uri.md为核心系统讲解如何在 PHP 8.2 环境中通过Xberg::extractBatch批量提取远程 URL 指向的文档内容并深入底层契约文件与端到端测试帮助你完整掌握 URI 输入建模、逐输入独立配置、结果结构读取以及批量失败的语义处理。背景Xberg 的 PHP 绑定与批量提取能力Xberg 是一个以 Rust 为核心的多语言文档智能引擎同一套 Rust 实现通过 alef 绑定生成器输出到 Rust、Python、Node.js、Go、Java、PHP、Ruby、.NET、Elixir、WASM、Kotlin、Swift、Dart、Zig 与 C FFI 共十五种语言绑定覆盖 106 种格式、140 种文件扩展名的文本、表格、图片、元数据与结构化数据提取见 packages/php/README.md。PHP 绑定提供 PHP 8.2 的现代类型安全 API其中批量提取接口extractBatch允许在一次调用中提交多个输入bytes 或 uri 类型由引擎并行处理后统一返回结果集合。安装与前置环境在运行批量 URI 提取之前先完成包安装与环境准备composer require xberg-io/xberg运行前提详见 packages/php/README.md 的 Installation 一节PHP 8.2为硬性要求可选ONNX Runtime 1.24用于依赖 ORT 的推理功能如嵌入向量可选Tesseract OCR用于扫描件文字识别。安装完成后在脚本中通过 Composer 的自动加载器引入类型定义require_once __DIR__ . /vendor/autoload.php;核心类型ExtractInput 与 ExtractionConfig批量提取的输入与配置均支持 JSON 字符串构建这是契约测试中使用的主要方式ExtractInput::from_json(string $json)将一个 JSON 字符串解析为提取输入对象。URI 类型输入的关键字段为kind:uri与uri:文档地址ExtractionConfig::from_json(string $json)将 JSON 字符串解析为提取配置对象用于控制输出格式、OCR、分块、关键词等行为。空对象{}表示使用默认配置。从源码结构看PHP 绑定中的类型由 alef 生成packages/php/src 目录内是各插件接口如 DocumentExtractor.php而Xberg、ExtractInput、ExtractionConfig等核心类由绑定生成器产出与其余语言的 API 形状保持一致。批量 URI 提取的最小可用示例以下代码来自官方契约片段 api_extract_batch_uri.md 的 PHP 示例展示用单个 URI 输入调用extractBatch并读取结果的 MIME 类型与正文内容?php declare(strict_types1); require_once __DIR__ . /vendor/autoload.php; use Xberg\Xberg; use Xberg\ExtractInput; use Xberg\ExtractionConfig; $result Xberg::extractBatch( [ExtractInput::from_json({kind:uri,uri:https://example.com/pdf/fake_memo.pdf})], \Xberg\ExtractionConfig::from_json({}) ); var_dump($result-getResults()[0]-mimeType); var_dump($result-getResults()[0]-content);要点拆解输入数组extractBatch的第一个参数是ExtractInput[]数组可以混入多个kinduri或bytes输入引擎统一调度配置参数第二个参数传入ExtractionConfig此处为{}即默认配置结果读取返回对象通过getResults()取得结果数组下标[0]对应第一个输入的处理结果mimeType为识别出的 MIME 类型content为提取出的文本正文。在实际生产中你通常用fromUri()便捷方法或动态拼接 JSON 来构造多个 URI 输入例如处理一个 PDF 列表$inputs [ ExtractInput::from_json({kind:uri,uri:https://example.com/pdf/fake_memo.pdf}), ExtractInput::from_json({kind:uri,uri:https://example.com/reports/q2.pdf}), ]; $result Xberg::extractBatch($inputs, ExtractionConfig::from_json({})); foreach ($result-getResults() as $item) { echo $item-mimeType, | , strlen($item-content), chars\n; }为每个输入指定独立配置批量提取支持逐输入覆盖配置在输入 JSON 内嵌config字段即可让该输入使用不同于全局配置的参数。官方配套契约片段 api_extract_batch_uri_with_config.md 展示了将单个输入的输出格式强制为 Markdown 的写法?php declare(strict_types1); require_once __DIR__ . /vendor/autoload.php; use Xberg\Xberg; use Xberg\ExtractInput; use Xberg\ExtractionConfig; $result Xberg::extractBatch( [ExtractInput::from_json({config:{output_format:markdown},kind:uri,uri:https://example.com/pdf/fake_memo.pdf})], \Xberg\ExtractionConfig::from_json({}) ); foreach ($result-getResults() as $result) { echo $result-getContent(), PHP_EOL; }这里的config:{output_format:markdown}即输入级配置对象output_format指定输出格式引擎支持纯文本、Markdown、Djot、HTML、JSON 树结构与 Docling DocTags 等多种输出格式详见 packages/php/README.md 的 Key Capabilities 一节。getContent()与content属性等价均可取得提取正文。该能力的实用价值在于一次批量任务中你可以对 A 文档要求 Markdown 输出、对 B 文档要求结构化 JSON 输出而无需发起多次请求。底层契约fixture 如何定义“正确行为”批量 URI 提取的预期行为被固化为契约文件 fixtures/contract/api_extract_batch_uri.json该文件是对上述 PHP 示例的机器可读定义{ id: api_extract_batch_uri, call: extract_batch, input: { mock_responses: [ { path: /pdf/fake_memo.pdf, status_code: 200, headers: { content-type: application/pdf }, body_file: ../test_documents/pdf/fake_memo.pdf } ], inputs: [ { kind: uri, uri: $mock_url/pdf/fake_memo.pdf } ] }, assertions: [ { type: equals, field: results[0].mime_type, value: application/pdf }, { type: min_length, field: results[0].content, value: 10 }, { type: contains_any, field: results[0].content, values: [May 5, 2023, Mallori] } ] }从中可提炼三条可验证的契约语义URI 输入会被下载引擎向uri指向的地址发起请求这里的$mock_url是测试时替换为 mock 服务器地址的占位符mock 返回application/pdf的fake_memo.pdf正文MIME 识别基于响应内容断言results[0].mime_type等于application/pdf说明即使输入未显式声明 MIME引擎也能通过内容嗅探识别提取内容非空且包含文档真实文本正文长度至少 10 字符且至少包含May 5, 2023或Mallori之一证明提取的不是空壳而是文档实际内容。端到端验证E2E 测试如何运行同一场景上述契约被直接编译为 PHP 端到端测试 ContractTest.php。其中test_api_extract_batch_uri()见 ContractTest.php与test_api_extract_batch_uri_with_config()见 ContractTest.php是本文示例的完整可运行版本测试通过环境变量注入 mock 服务器地址$inputsMockBaseUrl getenv(MOCK_SERVER_API_EXTRACT_BATCH_URI) ?: getenv(MOCK_SERVER_URL) . /fixtures/api_extract_batch_uri; $result XbergApi::extractBatch( [ExtractInput::from_json(str_replace($mock_url, $inputsMockBaseUrl, {kind:uri,uri:$mock_url/pdf/fake_memo.pdf}))], \Xberg\ExtractionConfig::from_json({}) );测试随后断言mimeType application/pdf、正文长度 ≥ 10并校验正文包含May 5, 2023或Mallori带配置变体还会额外断言元数据中的outputFormat markdown通过getMetadata()-outputFormat读取。这套测试由 alef 从 fixture 生成文件头标注auto-generated by alef — DO NOT EDIT因此fixture 变更会同步驱动所有语言的 E2E 测试保证跨语言 API 行为一致。批量语义汇总信息与部分失败处理与单文档extract不同extractBatch返回的结果对象带有汇总信息summary用于统计成功与失败数量。E2E 测试 BatchTest.php 覆盖了多种边界情况场景测试方法预期行为空批量test_extract_batch_empty_inputsresults数量为 0不报错URI 全部失效test_extract_batch_uri_all_missingsummary-results 0summary-errors 2URI 部分失败test_extract_batch_uri_partial_failure一个输入成功、一个解析失败results 1、errors 1URI 基本成功test_extract_batch_uri_basic多个 URIPDF 与纯文本全部提取results 2因此生产代码中应优先读取summary而不是假设结果数组长度与输入数量相等$output Xberg::extractBatch($inputs, ExtractionConfig::from_json({})); echo Processed {$output-summary-results} documents\n; echo Errors: {$output-summary-errors}\n; foreach ($output-getResults() as $result) { echo Content: . strlen($result-content) . chars\n; echo MIME: {$result-mimeType}\n\n; }该写法与 packages/php/README.md 中 Batch Processing 一节的多文件处理示例一致。从 PHP 到 Rust 内核一次调用的完整链路从仓库源码结构可以梳理出批量 URI 提取的调用链PHP 侧Xberg::extractBatch()将 PHP 数组序列化为绑定协议请求ExtractInput与ExtractionConfig对象在 packages/php/src 所声明的接口如 DocumentExtractor.php之上由 alef 生成的桥接层完成与原生库的类型转换原生内核请求落入 crates/xberg/src/api 的提取入口由extract_batch分发到各文档提取器extractorsURI 输入先经下载器获取字节流再按内容嗅探 MIME 并匹配对应格式解析器结果回传每个输入独立产出ExtractedDocument含mime_type、content、metadata、tables等引擎汇总后整体返回PHP 侧通过getResults()/getSummary()读取。这一架构决定了批量提取的三个工程特性格式识别由内容驱动而非文件名驱动、单个输入失败不拖垮整批任务、每个输入可携带独立配置——正是 fixtures/contract/api_extract_batch_uri.json 中call: extract_batch所固化的多输入、独立成结果的调用模型。小结本文以 api_extract_batch_uri.md 的官方 PHP 示例为主线覆盖了批量 URI 提取的完整技术栈ExtractInput::from_json的输入建模、ExtractionConfig::from_json的全局与逐输入配置、getResults()/getSummary()的结果与汇总读取以及由 fixtures/contract/api_extract_batch_uri.json 与 ContractTest.php 共同保证的契约一致性。在 PHP 应用中集成 Xberg 时按此模式组织批量任务即可获得跨 106 种格式的统一提取能力与优雅的失败隔离。赞分享后端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 Dart 批量 URI 提取实战extractBatch 调用的完整流程、契约验证与底层原理Xberg Dart 批量 URI 提取实战extractBatch 调用的完整流程、契约验证与底层原理 本篇技术指南围绕 Xberg 仓库中 Dart 语言后端AI 应用NLP使用 AWS CLI 的 cognito-idp admin-create-user 创建 Cognito 用户池用户命令、参数与输出解析使用 AWS CLI 的 cognito idp admin create user 创建 Cognito 用户池用户命令、参数与输出解析 导读 admin后端AI 应用NLPPHP 批量文档提取空批次调用Xberg extractBatch([]) 的行为解析与实战验证PHP 批量文档提取空批次调用Xberg extractBatch 的行为解析与实战验证 导读 在 Xberg 的 PHP 绑定中 Xberg::extra后端AI 应用NLP上一篇Gemma模型RMSNorm实现PyTorch代码中的归一化层细节下一篇完整指南为旧款iPhone添加灵动岛功能的实用方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考