
后端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 语言绑定提供的批量文档提取接口extract_batchPHP 端对应Xberg::extractBatch以api_extract_batch_bytes契约文档为核心完整讲解如何以内存中的字节数据而非磁盘路径或 URL批量提交文档、如何按输入单独覆写提取配置、如何读取返回的 MIME 类型与正文内容并结合仓库中的契约夹具、端到端测试与 Rust 核心实现帮助你直接写出可复制、可运行的批量提取代码。背景extract_batch是什么xberg 是一个以 Rust 为核心的文档智能引擎提供文本、元数据、图片、表格与结构化数据提取支持 106 种格式、140 种文件扩展名并对外提供 CLI、REST API、MCP Server 以及包括 PHP 在内的十五种语言绑定。PHP 绑定packages/php面向 PHP 8.2通过原生扩展暴露类型安全的 API。在单文档场景PHP 绑定使用Xberg::extract处理一个输入当需要一次处理多份文档时应使用extract_batchPHP 中为Xberg::extractBatch。它接收一个输入数组与一个全局ExtractionConfig并返回一个包含结果列表与汇总统计的对象。仓库中的契约文档 api_extract_batch_bytes.md 专门验证了以 bytes 形式提交输入的批量提取路径本文即围绕它展开。环境准备安装 PHP 绑定在运行任何示例前需要先通过 Composer 安装 PHP 包packages/php的完整使用说明见 packages/php/README.mdcomposer require xberg-io/xberg系统要求PHP 8.2绑定强制要求可选ONNX Runtime 1.24用于依赖 ORT 的推理特性如 embeddings可选Tesseract OCR用于扫描件 OCR 功能。所有示例都假设已经通过 Composer 生成vendor/autoload.php并在脚本开头引入require_once __DIR__ . /vendor/autoload.php;契约核心用 bytes 输入调用extractBatch下面这段代码就是关联文档的核心示例完整展示了 PHP 中批量字节提取的标准写法?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({bytes:pdf/fake_memo.pdf,filename:fake_memo.pdf,kind:bytes})], \Xberg\ExtractionConfig::from_json({})); var_dump($result-getResults()[0]-mimeType); var_dump($result-getResults()[0]-content);逐行拆解其中的关键点Xberg::extractBatch(array $inputs, ExtractionConfig $config)批量提取入口第一个参数是ExtractInput数组第二个参数是全局配置ExtractInput::from_json(...)以 JSON 字符串构造输入对象。这里传入的 JSON 包含三个字段kind:bytes声明本次输入类型为字节流区别于kind:uri的 URL 输入bytes:pdf/fake_memo.pdf契约夹具中用于表示字节数据的字段真实场景下应替换为file_get_contents(...)读取的二进制内容可结合mime_type字段声明媒体类型如mime_type:application/pdffilename:fake_memo.pdf为字节数据提供文件名供格式探测与结果溯源使用ExtractionConfig::from_json({})以空 JSON 构造全局配置即使用默认提取行为读取结果$result-getResults()返回结果数组[0]取第一份文档的结果-mimeType是探测出的 MIME 类型-content是提取出的正文文本。该契约对应的 JSON 夹具与断言关联文档由 alef 自动生成文档头部注释写明auto-generated by alef — DO NOT EDIT可由alef e2e generate重新生成其源头是仓库中的契约夹具 api_extract_batch_bytes.json。该夹具真实提交了一段 PDF 字节%PDF-1.3开头的完整小文件并在assertions中声明了三条验收断言断言类型目标字段期望值含义equalsresults[0].mime_typeapplication/pdf字节内容被正确探测为 PDFmin_lengthresults[0].content10提取出的正文至少 10 个字符contains_anyresults[0].content[May 5, 2023, Mallori]正文中必须包含原文档的真实内容片段也就是说契约不仅验证调用能成功还验证了格式探测准确、正文真实可读。这就是你在自己的 PHP 脚本中应该对mimeType与content做的断言。按输入覆写配置output_format等逐项控制批量场景经常需要同一批文档、不同输出格式。契约文档 api_extract_batch_bytes_with_config.md 展示了在单个ExtractInput内嵌config字段的做法?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({bytes:pdf/fake_memo.pdf,config:{output_format:markdown},filename:fake_memo.pdf,kind:bytes})], \Xberg\ExtractionConfig::from_json({})); var_dump($result-getResults()[0]-mimeType); var_dump($result-getResults()[0]-content); var_dump($result-getResults()[0]-getMetadata()-outputFormat);与第一个示例唯一的差异是ExtractInput的 JSON 中多了config:{output_format:markdown}该内嵌config只作用于当前这个输入优先级高于传给extractBatch的全局配置实现批量任务中逐文档定制行为output_format: markdown指定输出格式为 Markdown。xberg 的 PHP 绑定支持六种输出格式纯文本text、Markdown、Djot、HTML、JSON 树结构、Docling DocTags见 packages/php/README.md 的 Key Capabilities追加的$result-getResults()[0]-getMetadata()-outputFormat用于核对本次实际生效的输出格式确认内嵌配置确实被应用。对应的夹具 api_extract_batch_bytes_with_config.json 使用相同的一段 PDF 字节标签为input_config专门验证per-input config的合并语义。混合输入与批内错误隔离来自端到端测试的印证仓库中的 PHP 端到端测试 BatchTest.php 覆盖了extract_batch更完整的边界行为可作为你编写生产代码时的参考基线多格式混合输入test_extract_batch_bytes_happy同一批提交text/plain与text/html两份字节输入断言结果数 1空批次test_extract_batch_empty_inputs传入空数组断言返回的结果数为 0——空批次是合法输入不会抛异常无效/不支持 MIMEtest_extract_batch_bytes_invalid_mime、test_extract_batch_bytes_unsupported_mime提交无法识别的application/x-nonexistent、application/x-unknown字节返回对象不为空即错误被降级处理而不是中断整个批次URI 批量与部分失败test_extract_batch_uri_all_missing、test_extract_batch_uri_partial_failure当某个输入失败时通过$result-getSummary()-results与$result-getSummary()-errors分别统计成功数与失败数。例如两份缺失 URI 时断言results 0、errors 2一份有效 一份损坏 PDF 时断言results 1、errors 1。这些测试从源码层面e2e/php/tests/BatchTest.php证实了extract_batch的逐输入错误隔离设计单个输入失败不会拖垮整批通过summary可以精确追踪成功/失败计数。配套的 fixtures 目录fixtures/batch/也提供了bytes_happy、bytes_mixed_format、empty_inputs、bytes_size_cap、extract_batch_uri_*等一批契约输入便于离线复现各种行为。真实场景从字节到结构化结果的完整写法把契约示例、内嵌配置与测试中的边界行为组合起来可以得到一个可直接用于生产的 PHP 批量提取脚本?php declare(strict_types1); require_once __DIR__ . /vendor/autoload.php; use Xberg\Xberg; use Xberg\ExtractInput; use Xberg\ExtractionConfig; $inputs [ // 1) 从内存字节提交PDF 用 markdown 输出 ExtractInput::from_json(json_encode([ kind bytes, bytes base64_encode(file_get_contents(memo.pdf) ?: ), filename memo.pdf, config [output_format markdown], ])), // 2) 从磁盘路径提交uri 输入 ExtractInput::from_json(json_encode([ kind uri, uri report.docx, ])), // 3) 从内存字节提交文本文件显式声明 mime_type ExtractInput::from_json(json_encode([ kind bytes, bytes base64_encode(file_get_contents(note.txt) ?: ), filename note.txt, mime_type text/plain, ])), ]; $config ExtractionConfig::from_json(json_encode([ extract_tables true, extract_images false, ])); $output Xberg::extractBatch($inputs, $config); echo 成功处理: {$output-summary-results} 份失败: {$output-summary-errors} 份\n; foreach ($output-getResults() as $i $result) { printf([%d] %s (%s) — %d 字符\n, $i, $result-mimeType, $result-getMetadata()-outputFormat ?? text, strlen($result-content)); }需要说明的细节关于bytes字段的编码契约夹具中bytes直接给出字节数组[37, 80, 68, 70, ...]即%PDF...的 ASCII 码在 PHP 端通过from_json构造时请以你实际使用的绑定版本所接受的格式为准字节数组或 base64 字符串均可尝试务必以 packages/php/README.md 与vendor/下生成的类型声明为准。更稳妥的面向对象写法是使用 README 展示的ExtractInput::fromBytes($content, text/plain, note.txt)与ExtractInput::fromUri(document.pdf)工厂方法全局配置extract_tables/extract_images控制是否提取表格与图片与 README 中new ExtractionConfig(extractTables: true, extractImages: false)语义一致输出对象模型$result-mimeTypeMIME 类型、$result-content正文、$result-getMetadata()元数据含outputFormat等、$result-tables表格数组每个表格含markdown与pageNumber以及$output-summary批次汇总。这些字段在 packages/php/README.md 的 Quick Start 与 Batch Processing 章节均有对应用法。底层原理字节输入的探测与并行处理从源码结构看crates/xberg-php/src/lib.rs 与 crates/xberg-php/src/Xberg.php 为 PHP 扩展的 Rust 桥接层PHP 绑定的extractBatch与 Rust 核心的extract_batch能力一一对应格式探测kind:bytes输入携带原始字节与可选mime_type。核心引擎会综合 MIME 声明、文件魔数如%PDF-与filename扩展名做智能探测——这正是契约断言中字节是 PDF、探测结果必须是application/pdf能被稳定验证的原因并行与隔离批次内的多个输入由 Rust 核心并行调度处理单个输入失败以错误条目计入summary.errors不会中断其余输入由 BatchTest.php 的 URI 部分失败测试印证配置合并ExtractInput内嵌的config覆盖全局ExtractionConfig最终按输入级优先于批次级合并后执行预设Preset机制PHP 绑定还暴露了Registry见 crates/xberg-php/src/Registry.php可加载编译期内嵌的预设或运行时目录中的预设文件为ExtractInput/ExtractionConfig提供可复用的命名配置组合。总结通过Xberg::extractBatch你可以在 PHP 中一次性提交多份字节输入或 URI 输入完成批量文档提取并通过三个层次控制行为输入类型kind、输入级配置内嵌config、批次级配置ExtractionConfig。契约夹具fixtures/contract/api_extract_batch_bytes.json与端到端测试e2e/php/tests/BatchTest.php共同保证了格式探测准确、正文可读、单输入失败不拖垮整批这三个核心承诺。对于需要高吞吐处理大量文档的 PHP 服务extractBatch是比循环调用extract更高效、更健壮的批量入口。赞分享后端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 Elixir 批量提取实战混合 bytes 与 URL 输入的 extract_batch 统一输出Xberg Elixir 批量提取实战混合 bytes 与 URL 输入的 extract_batch 统一输出 Xberg 是一个以 Rust 为核心的多语后端AI 应用NLPXberg Elixir 批量字节提取实战extract_batch API 契约、配置覆盖与结果解析Xberg Elixir 批量字节提取实战extract_batch API 契约、配置覆盖与结果解析 本篇技术指南以 Xberg 仓库中 Elixir co后端AI 应用NLPHydra 实验配置模式Configuring Experiments用 experiment 优雅管理多套基准配置Hydra 实验配置模式Configuring Experiments用 experiment 优雅管理多套基准配置 导读 本文讲解 Hydra 官方后端AI 应用NLP上一篇Zonos-v0.1架构设计图详解核心模块与数据流可视化下一篇DOSBox-X终极指南快速解决10个常见问题轻松运行经典DOS游戏和Windows系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考