ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Xberg Java 批处理提取实战:extract_batch 处理缺失 URI 输入的容错机制与结果解析

Xberg Java 批处理提取实战:extract_batch 处理缺失 URI 输入的容错机制与结果解析 后端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 官方 Java 示例 extract_batch_uri_all_missing 为骨架讲解 Java 绑定中Xberg.extractBatch面对批量 URI 输入全部缺失文件不存在时的真实行为调用本身不会抛异常而是在返回结果中通过summary.errors精确统计失败项实现“单次调用、逐项容错”。读完本文你将掌握ExtractInputkind: uri的 JSON 构造方式、批量提取结果ExtractionResult的三层结构results/errors/summary以及如何把这一模式用于生产级批处理管线的失败率监控。场景定位为什么需要“全部缺失”这一用例在文档智能提取系统中批量任务往往来自异步队列一批文件路径由调度器下发处理时某些文件可能已被删除、迁移或权限不可读。Xberg 的extractBatch设计目标之一就是让这类“文件级失败”不中断整个批次单个输入失败不会让整批调用抛出异常not_error语义失败项会被捕获到ExtractionResult.errors中附带输入下标与稳定错误码调用方通过summary.results与summary.errors的计数即可判断整批任务的健康度。对应的契约 fixture extract_batch_uri_all_missing.json 明确断言了这一行为summary.results 0、summary.errors 2且整批调用类型为not_error即成功返回而非抛异常。官方示例两个不存在的 URI 输入关联文档 docs-site/src/snippets-generated/java/batch/extract_batch_uri_all_missing.md 给出的完整 Java 代码如下import io.xberg.*; public final class Example { public static void main(String[] args) throws Exception { var result Xberg.extractBatch(java.util.Arrays.asList(JsonUtil.fromJson({\kind\:\uri\,\uri\:\/nonexistent/a.pdf\}, ExtractInput.class), JsonUtil.fromJson({\kind\:\uri\,\uri\:\/nonexistent/b.txt\}, ExtractInput.class)), ExtractionConfig.builder().build()); System.out.println(result.summary().results()); System.out.println(result.summary().errors()); } }该示例的关键要素可以拆解为四部分JsonUtil.fromJson(json, ExtractInput.class)将 JSON 字符串反序列化为ExtractInput对象。这是生成式 Java 绑定提供的手写 JSON 便捷工具对应包io.xbergkind:uri声明输入类型为 URI 而非字节流bytes详见下文ExtractInput的两种 kinduri:/nonexistent/a.pdf指向不存在的本地文件路径用于触发文件缺失错误ExtractionConfig.builder().build()使用全默认配置ExtractionConfig采用 builder 模式构造。若希望以面向对象方式而非 JSON 字符串构造输入同样语义的等价代码可见 java 语言包示例它使用ExtractInput.builder().withKind(ExtractInputKind.URI).withUri(report.pdf).build()两种方式在运行时完全等价。运行结果与预期断言运行上述示例打印结果应为0 2即summary.results()为 0没有任何成功提取结果summary.errors()为 2两条输入全部失败。这一预期由 fixtures/batch/extract_batch_uri_all_missing.json 中的断言summary.results 0、summary.errors 2与 Java 端到端测试 BatchTest.java 双重锁定Test void testExtractBatchUriAllMissing() throws Exception { // extract_batch with missing URI inputs var result Xberg.extractBatch(java.util.Arrays.asList(JsonUtil.fromJson({\kind\:\uri\,\uri\:\/nonexistent/a.pdf\}, ExtractInput.class), JsonUtil.fromJson({\kind\:\uri\,\uri\:\/nonexistent/b.txt\}, ExtractInput.class)), ExtractionConfig.builder().build()); assertEquals(0, result.summary().results()); assertEquals(2, result.summary().errors()); }需要特别说明断言中检查的是result.summary()而示例代码打印的result.summary().results()与之等价。Java 绑定中ExtractionResult的summary()访问器即指向 Rust 侧ExtractionSummary结构。深入底层ExtractionResult 的三层结构Java 绑定入口 Xberg.java 将extractBatch(ListExtractInput, ExtractionConfig)委托给 Rust 引擎返回的ExtractionResult在 Rust 侧定义于 extraction/types.rs由三部分构成字段类型含义resultsVecExtractedDocument成功提取出的文档按发现顺序排列errorsVecExtractionErrorItem非致命per-input错误即逐条输入失败项summaryExtractionSummary聚合计数其中ExtractionSummarytypes.rs包含六个计数inputs调用方提交的输入总数本示例为 2results成功产生的提取结果数本示例为 0errors逐条错误数本示例为 2remote_urls解析为远程 HTTP(S) 的 URI 输入数pages_crawled爬取/抓取的 HTML 页数documents_downloaded从 URL 下载并提取的非 HTML 文档数。引擎在批处理收尾时通过refresh_counts()依据results.len()与errors.len()重算 summary见 extract_impl.rs因此results errors未必等于inputs例如 URL 爬取场景下一条输入可能产生多个结果或部分输入被去重这一点在统计失败率时需要注意。错误项的结构每个失败项ExtractionErrorItemtypes.rs包含index输入在原始请求中的下标从 0 开始code稳定的数值错误码u32error_type稳定的 snake_case 错误类型字符串source尽力而为的来源标识本示例为/nonexistent/a.pdf这类 URImessage可读的错误消息。Java 中通过result.errors()获取错误列表配合summary()的计数即可实现“按失败项聚合告警”例如遍历errors()按error_type()分组统计各错误类型占比。引擎实现批处理如何逐项捕获错误extract_batch的引擎级实现位于 extract_impl.rs根据编译特性存在两条路径顺序执行extract_batch_sequentialL357-L387适用于未启用tokio-runtime特性或 WASM 目标逐个await输入并发执行extract_batch_concurrentL389-L459适用于启用了tokio-runtime的宿主环境通过有界任务队列bounded batch tasks并行处理并按批次预算初始化线程池init_thread_pools。两条路径共享相同的容错逻辑对每个输入调用extract_one成功则把产出合并进输出失败则调用error_item(index, source, error)生成错误项压入output.errorsL378-L381。error_itemL1866-L1874将 Rust 的XbergError映射为稳定的codeextraction_error_code与error_typeextraction_error_type。对于文件不存在的 URI对应错误即从输入解析/读取阶段抛出并被捕获这正是示例中errors 2的来源。此外批处理还包含“未匹配错误”的兜底机制当批量结果被排空后若某个槽位仍为None说明该输入既未产生结果也未产生错误此时会用unmatched_errors补齐确保任何输入都不会同时从results与errors中消失见 extract_impl.rs 的注释说明。同族用例对照从全部失败到部分失败仓库中与本次“全部缺失”配套的同类 fixture 可以帮助你快速理解批处理语义的边界fixture输入预期results/errorsextract_batch_uri_not_found.json1 个缺失 URI0 / 1extract_batch_uri_all_missing.json2 个缺失 URI0 / 2extract_batch_uri_partial_failure.json1 个有效 1 个损坏文档1 / 1extract_batch_uri_basic.json2 个有效 URI≥2 / 0这些用例在 BatchTest.java 中均有同名测试方法testExtractBatchUriNotFound、testExtractBatchUriBasic、testExtractBatchUriPartialFailure等可作为回归基准。对照可见单个输入失败不会影响其他输入的提取这正是extractBatch相比逐条循环调用extract的核心优势——一次网络/FFI 往返即可拿到整批结果与逐项错误。实战建议把批量提取接到生产管线失败率监控对每批调用计算summary.errors() / summary.inputs超过阈值例如 5%触发告警由于results errors在爬取场景下可能不等于inputs建议同时上报summary.inputs、remote_urls、pages_crawled以辅助归因。错误分类遍历errors()按error_type()聚合例如文件缺失、权限、解析失败等驱动重试策略——仅对可重试类型如临时网络错误重试文件缺失类错误直接进入补偿队列。结果-错误联合消费利用index字段把每个错误项映射回原始输入列表精确定位失败文件成功结果与错误项分开消费避免混用。配置默认值示例使用ExtractionConfig.builder().build()全默认配置即可覆盖文件缺失场景若输入可能指向远程 URL可在ExtractionConfig中按需配置 URL 提取与爬取相关参数参考 extract_batch_uri_basic.json 的 mock server 用法。测试保障在 CI 中复用 BatchTest.java 的模式把“全部缺失”“部分失败”“全部成功”“空批次”四类用例固化为回归测试确保引擎行为变更时能第一时间感知。小结extract_batch面对全部缺失的 URI 输入时既不抛异常也不静默吞错而是返回results 0、errors 2的完整结果信封把“文件级失败”显式暴露给调用方。理解ExtractionResult的results/errors/summary三层结构以及引擎层逐项捕获、refresh_counts重算、未匹配错误兜底这三重机制就能在 Java 中构建健壮、可观测、可重试的批量文档提取管线。赞分享后端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 批量提取容错实战extract_batch 处理全部缺失 URI 输入Xberg Dart 批量提取容错实战extract_batch 处理全部缺失 URI 输入 导读 当一批待提取的文档 URI 全部指向不存在的文件如路径拼后端AI 应用NLPXberg C 绑定批量提取容错指南用 extract_batch 处理全部 URI 缺失的场景Xberg C 绑定批量提取容错指南用 extract_batch 处理全部 URI 缺失的场景 批量文档提取 extract_batch 是 Xberg后端AI 应用NLPxberg C FFI 批量 URI 提取错误处理实战extract_batch 对不存在 URI 的容错语义xberg C FFI 批量 URI 提取错误处理实战extract_batch 对不存在 URI 的容错语义 本篇技术指南聚焦 xberg 的 C FFI后端AI 应用NLP上一篇实战案例用JoyAI-Image-Edit-Plus将人像与宠物完美合成的5个技巧下一篇Vundle插件管理器常见问题解答创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表