
后端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 的 C FFI 绑定中批量抽取入口xberg_extract_batch讲解如何一次性传入多个文档输入bytes / URI并为每个输入独立配置抽取参数per-input config。读完本文你将掌握 C 侧批量抽取的 JSON 载荷结构、句柄与内存释放约定、per-input config 与全局 config 的配合方式并理解该接口在 Rust 核心中的真实调用链可直接迁移到 Rust、Python、Java 等其余绑定场景。一、接口定位一次调用处理多个文档xberg 的 C 绑定crates/xberg-ffi通过头文件 crates/xberg-ffi/include/xberg.h 暴露一组稳定 API。其中单文档抽取使用xberg_extract而需要批量处理的场景使用XBERGAlefHandle xberg_extract_batch(const char *inputs, XBERGAlefHandle config);该声明位于 crates/xberg-ffi/include/xberg.h#L29794其设计意图在头文件注释中写得很清楚Extract content from multiple bytes or URI inputs——即允许在一次调用中混合处理多个以内存字节bytes或资源地址URI形式给出的文档。与单文档版本相比extract_batch的价值在于减少跨语言边界的往返开销多条文档只需一次 FFI 调用避免逐条抽取时反复构造/释放句柄支持异构输入混排同一次调用中不同条目可以是 bytes也可以是 URI支持逐条差异化配置每个输入条目都可以携带自己的config对象实现一文档一策略。从 Rust 侧的实现可以印证这一点。crates/xberg/src/core/extract/mod.rs#L28 中定义了解析批量输入并委派给全局默认引擎的入口pub async fn extract_batch(inputs: VecExtractInput, config: ExtractionConfig) - ResultExtractionResult { DEFAULT_ENGINE.extract_batch(inputs, config).await }C 绑定接收的inputs字符串正是VecExtractInput的 JSON 序列化形式ExtractionResult则是与单文档一致的结果信封结构其中每个输入对应一个results条目。二、读懂 contract 示例一次带逐条配置的 bytes 批量抽取仓库中由 alef 生成的 C 契约样例 docs-site/src/snippets-generated/c/contract/api_extract_batch_bytes_with_config.md 完整演示了该接口的最小可运行形态原文如下#include assert.h #include stdint.h #include stdio.h #include stdlib.h #include string.h #include xberg.h int main(void) { XBERGAlefHandle result xberg_extract_batch([{\bytes\:\pdf/fake_memo.pdf\,\config\:{\output_format\:\markdown\},\filename\:\fake_memo.pdf\,\kind\:\bytes\}], 0); xberg_extraction_result_free(result); return EXIT_SUCCESS; }逐段拆解这段代码能提炼出使用该接口必须遵守的四条约定首个参数是 JSON 字符串inputs必须是一个 UTF-8 编码的 JSON 数组字符串数组内每个元素描述一个待抽取输入。第二个参数是全局配置句柄示例传入了0即 NULL表示本次批量抽取不额外指定全局配置。若需全局配置可先构造配置句柄再传入。返回值是句柄必须显式释放xberg_extract_batch返回XBERGAlefHandle类型的result调用结束后必须调用xberg_extraction_result_free(result)释放防止句柄泄漏。这也是 crates/xberg-ffi/include/xberg.h 中所有返回指针类 API 的统一安全约定Returned pointers must be freed with the appropriate free function。单输入 JSON 字段条目对象由kind、bytes、filename、config四个字段构成下面逐一说明。三、inputs 条目结构逐字段拆解结合契约样例与其对应的完整 fixture fixtures/contract/api_extract_batch_bytes_with_config.json可以还原出批量输入的完整字段语义字段类型含义与示例kind字符串输入来源类型本示例为bytes内存字节同族 fixture fixtures/contract/api_extract_batch_uri.json 展示了uri形态bytes字符串 / 字节数组文档原始内容。在 C 契约样例中为便于阅读以文件路径字符串pdf/fake_memo.pdf呈现fixture 中则记录为逐字节数组内容为一份 PDF 文档%PDF-1.3开头filename字符串逻辑文件名fake_memo.pdf用于结果中标识该条输入也供引擎按扩展名推断格式config对象per-input 配置本示例为{output_format: markdown}仅作用于当前条目关于bytes字段需要特别说明在 C 语言契约测试中真实二进制数据无法直接内联到可读源码里因此 alef 的 fixture 呈现层见 fixture 中docs.presentation.files其将/inputs/0/bytes映射为路径pdf/fake_memo.pdf用相对路径字符串代替原始字节。在实际业务代码中bytes应填入真实的文档字节内容C 侧传入 JSON 字符串时可采用 Base64 或按绑定约定编码。per-input config逐条覆盖全局配置config字段是extract_batch区别于简单循环调用的关键能力。它允许每个条目携带独立的ExtractionConfig例如指定输出格式output_format: markdown本示例所用控制页面范围、启用 OCR、抽取关键词等均可按条目差异化设置。仓库 fixtures/contract 目录下存在大量同类契约样例可作为 per-input config 的参考素材例如config_pages.json、config_keywords.json、config_llm_structured_extraction.json、config_quality_enabled.json等它们展示的配置项同样适用于批量场景下的逐条配置。当条目未携带config时该条输入将回落到批量调用的全局 config全局 config 也为空时则使用引擎默认配置。由此形成条目级 调用级 引擎默认的覆盖层级该层级关系可以从 crates/xberg/src/engine/extract_impl.rs 中批量抽取实现的分支结构推断得出。四、契约断言如何验证批量抽取结果与样例配套的 fixture fixtures/contract/api_extract_batch_bytes_with_config.json 定义了三条断言可作为批量接口正确性的验证标准{ type: equals, field: results[0].mime_type, value: application/pdf }, { type: min_length, field: results[0].content, value: 10 }, { type: equals, field: results[0].metadata.output_format, value: markdown }三条断言分别验证格式识别正确results[0].mime_type等于application/pdf说明引擎正确识别了传入的 PDF 字节内容抽取非空results[0].content长度不小于 10即确实抽取出了文本内容per-input config 生效results[0].metadata.output_format为markdown直接证明条目级config被透传并写入结果元数据——这是逐条配置真正生效的可验证证据。从结果结构看批量返回的ExtractionResult与单文档抽取共用同一信封results数组下标与inputs数组下标一一对应便于调用方按输入顺序对齐结果。五、完整可编译示例加入错误处理与结果读取把契约样例扩展为具备实用价值的 C 程序核心在于构造批量输入 JSON、调用xberg_extract_batch、检查句柄与结果、及时释放。参考代码如下#include assert.h #include stdint.h #include stdio.h #include stdlib.h #include string.h #include xberg.h int main(void) { /* 一条 bytes 输入 一条 uri 输入混排可对比 per-input config 与全局默认 */ const char *inputs [ {\kind\:\bytes\,\bytes\:\pdf/fake_memo.pdf\, \filename\:\fake_memo.pdf\, \config\:{\output_format\:\markdown\}}, {\kind\:\uri\,\uri\:\https://example.com/report.pdf\, \filename\:\report.pdf\} ]; /* 第二个参数为全局配置句柄本例传 0NULL表示使用默认配置 */ XBERGAlefHandle result xberg_extract_batch(inputs, 0); assert(result ! NULL); /* 真实项目中应检查错误状态并读取错误信息 */ /* 通过 XBERGAlefHandle 提供的查询函数读取 results、metadata 等字段 */ /* 无论成功与否都必须释放返回的句柄 */ xberg_extraction_result_free(result); return EXIT_SUCCESS; }注意事项assert(result ! NULL)仅是契约测试的最小校验生产代码应进一步通过句柄上的查询 API 读取错误码与错误描述并逐条检查results是否携带 per-input 的错误信息inputs中 JSON 字符串内的双引号需要按 C 字符串规则转义批量条目较多时建议用拼接或格式化函数生成所有通过xberg_*返回的XBERGAlefHandle都遵循谁申请、谁释放原则务必与对应的*_free函数配对避免长期运行的服务发生句柄泄漏。六、底层调用链与跨语言一致性从源码结构看xberg_extract_batch的完整链路为C 侧 crates/xberg-ffi/include/xberg.h#L29794 声明入口FFI 实现将inputsJSON 字符串解析为VecExtractInput把全局 config 句柄解析为ExtractionConfig委派到 Rust 核心 crates/xberg/src/core/extract/mod.rs#L28 的extract_batch由DEFAULT_ENGINE异步执行引擎对每个输入独立完成格式检测、内容抽取与 per-input 配置合并最终组装为统一的ExtractionResult实现细节见 crates/xberg/src/engine/extract_impl.rs 及其测试 crates/xberg/src/engine/extract_impl/tests.rs。同一份批量语义在其余绑定中保持一致Rust 直接调用 crates/xberg/src/core/extract/mod.rs 中的extract_batchNode 绑定crates/xberg-node、Python 包packages/python/xberg等都围绕同一套输入/输出契约实现。因此理解本文的 C 侧 JSON 载荷与 per-input config 规则后可以平滑迁移到其他语言绑定。七、进一步探索仓库提供了与本主题强相关的更多契约素材适合继续对照阅读无逐条配置的纯 bytes 批量抽取fixtures/contract/api_extract_batch_bytes.jsonURI 批量抽取fixtures/contract/api_extract_batch_uri.jsonURI 逐条配置fixtures/contract/api_extract_batch_uri_with_config.json批量输入相关的错误语义与边界错误码示例位于 fixtures/contract/error_extract_input_conflicting_ocr.json部分能力限制样例见 fixtures/contract/config_security_limits.jsonC 绑定整体说明与作用域见 crates/xberg-ffi/README.md 与 crates/xberg-ffi/SCOPE.md结合这些 fixture 与 crates/xberg/src/core/extract/mod.rs 的实现可以完整把握extract_batch在多输入混排、逐条配置、统一结果信封三个维度上的契约全貌为在 xberg 之上构建文档流水线提供可直接落地的参考。赞分享后端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 C 绑定实战在同一个抽取配置中组合结果缓存与质量后处理xberg C 绑定实战在同一个抽取配置中组合结果缓存与质量后处理 本文围绕 xberg 的 C 绑定 xberg.h / 生成的 ALEF 接口讲解如后端AI 应用NLPxberg 批处理提取 API 实战基于 C FFI 的 extract_batch 字节批量抽取xberg 批处理提取 API 实战基于 C FFI 的 extract_batch 字节批量抽取 导读 本文围绕 xberg 仓库中的契约测试文档 api_后端AI 应用NLPxberg C 绑定下的抽象式Abstractive文档摘要基于 FFI 的 LLM 摘要配置与调用实战xberg C 绑定下的抽象式Abstractive文档摘要基于 FFI 的 LLM 摘要配置与调用实战 本文以 xberg 仓库中为 C 语言生成的摘要后端AI 应用NLP上一篇【亲测免费】 Syncthing macOS 应用教程下一篇Grunt-UnCSS 使用指南彻底解决CSS冗余问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考