
后端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 绑定的一份冒烟测试片段展开讲解如何用 DartFlutter 或纯 Dart 服务器环境通过XbergBridge.extract提取纯文本plain text文件并验证返回的 MIME 类型与正文内容。读完本文你将掌握ExtractInput的 URI 输入构造、createExtractionConfigFromJson的 JSON 配置方式、RustLib生命周期管理以及如何参照仓库中的 fixture 与 e2e 测试编写自己的冒烟验证。一、这份文档在仓库中的定位关联文档docs-site/src/snippets-generated/dart/smoke/smoke_txt_basic.md是由 alef项目的多语言绑定生成器自动生成的 Dart 类型检查typecheck级代码片段对应冒烟测试分类smoke下的“Plain text file”用例。它的 front matter 明确标注了id: fixture_dart_smoke_txt_basiclanguage/target: dartlevel: typecheck用于验证生成代码可通过类型检查side_effect: server需要 mock 服务器提供测试文件自动生成标记alef e2e generate并要求alef verify校验内容新鲜度这段代码是 Xberg 十五种语言绑定一致性验证的一部分同一份 Rust 核心能力以近乎相同的代码形态暴露给每种语言。Dart 绑定通过flutter_rust_bridge与 Rust 核心通信包结构见 packages/dart核心桥接实现位于 packages/dart/lib/src/xberg.dart。二、前置准备安装与初始化安装 Dart 包在纯 Dart 项目中使用pub安装dart pub add xbergFlutter 项目使用flutter pub add xberg根据 packages/dart/pubspec.yaml当前包版本为1.3.0要求 Dart SDK3.11.0 4.0.0核心运行时依赖flutter_rust_bridge: 2.13.0FRB 运行时是纯 Dart 实现可同时用于 Flutter 与服务器 Dart 场景。原生库由flutter_rust_bridge随平台二进制一起交付支持 macOS、iOS、Android、Linux、WindowsFlutter Web 不受支持。初始化 Rust 运行时任何调用前都必须先初始化 FRB 生成的 Rust 桥接库并在结束时释放import package:xberg/src/xberg_bridge_generated/frb_generated.dart show RustLib; await RustLib.init(); // ... 执行提取逻辑 ... RustLib.dispose();RustLib由flutter_rust_bridge代码生成负责加载原生动态库并管理其生命周期。e2e 测试中同样遵循这一模式见 e2e/dart/test/smoke_test.dart 的setUpAll与tearDownAll。三、核心代码逐行解读原文档的完整 Dart 代码如下我们逐段拆解其含义import dart:io; import package:xberg/xberg.dart; import package:xberg/src/xberg_bridge_generated/frb_generated.dart show RustLib; Futurevoid main() async { await RustLib.init(); try { final input await createExtractInputFromJson(json: {kind:uri,mime_type:text/plain,uri:https://example.com/text/report.txt}); final config await createExtractionConfigFromJson(json: {}); final result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].mimeType); stdout.writeln(result.results[0].content); } finally { RustLib.dispose(); } }1. 输入构造createExtractInputFromJsonExtractInput是 FRB 生成的数据类没有默认构造函数参数因此通过 JSON 字符串构造省略的字段采用 Rust 侧的默认值。JSON 中三个关键字段字段值含义kinduri输入来源类型。从 packages/dart/lib/src/xberg.dart 的ExtractInputKindWireValue可知只有两种uri通过 URL 拉取与bytes内存中的原始字节mime_typetext/plain显式声明 MIME 类型指导格式检测与提取器选择urihttps://example.com/text/report.txt文档资源的访问地址关键细节这里显式指定了mime_type: text/plain。对照同目录 fixture fixtures/smoke/txt_basic.json 可以看到mock 服务器实际返回的 HTTPcontent-type是application/octet-stream但由于输入侧显式声明了text/plainXberg 会据此选择纯文本提取器。这意味着即使上游服务器 MIME 标注不准确你也可以通过输入 JSON 显式纠正文档类型。2. 配置构造createExtractionConfigFromJsonfinal config await createExtractionConfigFromJson(json: {});ExtractionConfig同样是生成的数据类无默认值用空对象{}表示“全部使用 Rust 侧默认配置”。这是 Dart 绑定的统一做法——README 与 docs-site/src/snippets/dart 中的多个片段如 api/extract.md、api/extract_batch.md都采用该模式。需要定制时只需传入 JSON 字段例如final config await createExtractionConfigFromJson(json: { force_ocr: true, ocr: { backend: tesseract, language: [eng] } } );对纯文本提取来说空配置即可直接使用。3. 提取调用XbergBridge.extractfinal result await XbergBridge.extract(input, config: config);extract是 Dart 侧桥接的静态方法从 packages/dart/lib/src/xberg.dart 的实现可以看到它最终把ExtractInput与ExtractionConfig交给 FRB 生成的rust_bridge.extract跨 FFI 调用 Rust 核心引擎完成实际的格式检测、解析与文本抽取。省略config参数时桥接层会默认使用createExtractionConfigFromJson(json: {})兜底与显式传入空配置等价。4. 结果读取stdout.writeln(result.results[0].mimeType); stdout.writeln(result.results[0].content);extract返回ExtractionResult其中results是文档结果列表results[0]对应首个文档.mimeType为提取器实际报告的类型应回显为text/plain.content为抽取出的全文内容。README 中的快速开始同样用output.results.first.content读取正文见 packages/dart/README.md。5. 资源释放try ... finally确保无论提取成功与否都调用RustLib.dispose()避免原生资源泄漏——这是所有基于 FRB 的 Dart 调用的标准收尾姿势。四、fixture 与 e2e 测试如何验证“提取成功”fixture 定义fixtures/smoke/txt_basic.json 定义了该用例的完整输入输出契约mock 响应路径/text/report.txt状态码 200响应体来自test_documents/text/report.txtextract_inputkind: uri、uri: $mock_url/text/report.txt、mime_type: text/plain断言assertionsresults[0].mime_type等于text/plainresults[0].content长度不小于 5调用方式call: extractconfig: {}e2e 测试实现Dart 侧的端到端测试位于 e2e/dart/test/smoke_test.dart 的Smoke test: Plain text file用例。测试通过 mock 服务器启动MOCK_SERVER_URL或本地app_harness.dart将 fixture 中的$mock_url占位符替换为真实 mock 地址后构造输入然后断言expect( result.results[0].mimeType.toString(), equals(text/plain.toString()), ); expect(result.results[0].content.length, greaterThanOrEqualTo(5));两处断言与 fixture 完全对应。需要说明的是由于测试依赖 mock 服务器side_effect: server运行前需按 scripts/e2e/run-with-mock-server.sh 的方式启动 mock 服务或通过环境变量MOCK_SERVER_URL/SUT_URL指向已在运行的系统。五、从纯文本扩展到其他场景掌握这份冒烟测试后可以沿同一代码骨架扩展本地文件与 bytes 输入将kind改为bytes并传入字节数组即可不经过网络直接提取内存数据kind: uri时也可以用本地文件路径替代 HTTP URL。批量提取XbergBridge.extractBatch接受ListExtractInput一次并行处理多份文档适合日志文本、报告目录等批量纯文本场景import package:xberg/xberg.dart; Futurevoid main() async { final inputs [ const ExtractInput(kind: ExtractInputKind.uri, uri: report.pdf), const ExtractInput(kind: ExtractInputKind.uri, uri: notes.txt), ]; final output await XbergBridge.extractBatch(inputs); for (final result in output.results) { print(result.content); } }配置扩展纯文本提取默认输出纯文本正文如需 Markdown、JSON 树等结构可在createExtractionConfigFromJson中配置输出格式。Xberg 共提供六种输出格式纯文本、Markdown、Djot、HTML、JSON 树结构、Docling DocTags。六、小结这份 Dart 冒烟测试片段虽然只有三十余行却完整覆盖了 Xberg Dart 绑定的核心调用链RustLib.init()→ JSON 构造输入与配置 →XbergBridge.extract→ 读取mimeType/content→RustLib.dispose()。结合 fixtures/smoke/txt_basic.json 的契约定义与 e2e/dart/test/smoke_test.dart 的断言实现你可以用同样模式为任意支持格式PDF、Office、HTML、JSON 等共 107 种格式编写 Dart 提取冒烟测试并保持与所有语言绑定一致的跨语言行为。赞分享后端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 冒烟测试实战用 XbergConverter.ExtractAsync 提取纯文本文件Xberg C 冒烟测试实战用 XbergConverter.ExtractAsync 提取纯文本文件 本文以仓库内 alef 自动生成的 C 冒烟测试片段后端AI 应用NLPHindsight Embed零配置本地记忆守护进程的架构与实战Hindsight Embed零配置本地记忆守护进程的架构与实战 本文以 Hindsight 仓库中的 hindsight embed Daemon CLI后端AI 应用NLPxberg C 语言绑定冒烟测试通过 URI 提取纯文本文档的 FFI 实战解析xberg C 语言绑定冒烟测试通过 URI 提取纯文本文档的 FFI 实战解析 本文围绕 xberg 仓库中自动生成的 C 语言冒烟测试片段 smoke_t后端AI 应用NLP上一篇大麦抢票自动化Python 购票脚本配置、参数调优与故障排查速查下一篇LaTeXML架构解析TeX文档的现代化转换引擎设计与实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考