ARTICLE DETAIL

资讯详情

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

Xberg Dart 绑定独立 DOCX 提取实战:用 XbergBridge.extract 从 Word 文档抽取全文内容

Xberg Dart 绑定独立 DOCX 提取实战:用 XbergBridge.extract 从 Word 文档抽取全文内容 后端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 语言绑定中最常见的独立 DOCX 提取场景通过XbergBridge.extract将一份.docxWord 文档的正文内容整体抽取出来。你将掌握 Dart 侧完整的 API 调用范式——初始化RustLib、用 JSON 构造ExtractInput与ExtractionConfig、调用提取接口、读取results[0].content并正确释放原生运行时同时结合 e2e 测试、fixture 与 Rust 核心源码理解 DOCX 提取的底层调用链与配置含义。场景与前置准备xberg 是一个以 Rust 为核心的多语言文档智能引擎Dart 绑定通过flutter_rust_bridgeFRB将原生能力封装成 Dart 可用的 Future/Stream API既可用于 Flutter 应用也可用于纯 Dart 服务端场景参见 Dart 绑定说明。Standalone DOCX extraction独立 DOCX 提取指的就是不依赖任何服务端进程、直接在宿主应用内完成对单个 Word 文档的抽取。安装依赖dart pub add xbergFlutter 项目则使用flutter pub add xberg。包内通过 flutter_rust_bridge 2.x 交付各平台原生运行库包清单见 packages/dart/pubspec.yaml。完整代码示例关联文档docs-site/src/snippets-generated/dart/format_specific/format_docx_standalone.md给出了一个可直接运行的完整示例核心如下原样继承并补充说明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: {filename:fake.docx,kind:uri,mime_type:application/vnd.openxmlformats-officedocument.wordprocessingml.document,uri:https://example.com/docx/fake.docx}); final config await createExtractionConfigFromJson(json: {}); final result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].content); } finally { RustLib.dispose(); } }这段代码完成四件事加载原生运行时 → 构造输入与配置 → 执行提取 → 输出正文并释放运行时。下面逐段拆解。代码逐段拆解1. 初始化与释放原生运行时await RustLib.init();RustLib由 flutter_rust_bridge 代码生成器产生位于packages/dart/lib/src/xberg_bridge_generated/frb_generated.dart负责加载并初始化打包在 xberg 包内的 Rust 原生库。提取结束后的清理同样关键finally { RustLib.dispose(); }用try/finally保证无论提取是否抛错原生运行时都能被正确释放避免在长期运行的服务中泄漏资源。2. 构造 ExtractInput输入描述createExtractInputFromJson是 FRB 生成的便捷构造器将 JSON 字符串解析为 Dart 侧的ExtractInput对象。示例中的 JSON 声明了一个远程 URI 输入{ filename: fake.docx, kind: uri, mime_type: application/vnd.openxmlformats-officedocument.wordprocessingml.document, uri: https://example.com/docx/fake.docx }各字段含义如下字段取值示例说明kinduri输入来源类型。uri表示按地址拉取文档还支持bytes直接内联二进制字节数组等其他种类urihttps://example.com/docx/fake.docx文档地址。fixture 场景下会指向 mock 服务器实际使用中可指向远程 URL也可以配置为本地可访问的地址mime_typeapplication/vnd.openxmlformats-officedocument.wordprocessingml.document标准 Office Open XML Word 文档 MIME 类型帮助引擎正确路由到 DOCX 提取器filenamefake.docx文件名提示参与格式识别与元数据产出对应地e2e 测试中还会把uri中的$mock_url占位符替换为 mock 服务器地址见 e2e/dart/test/format_specific_test.dart确认这套输入结构在真实 HTTP 拉取路径下同样成立。3. 构造 ExtractionConfig提取配置final config await createExtractionConfigFromJson(json: {});createExtractionConfigFromJson将 JSON 映射为 Dart 侧的ExtractionConfig。传{}表示全部采用引擎侧默认值——对独立 DOCX 提取而言默认配置已经足够引擎会自动选择文本提取路径产出结构化正文。需要说明的是ExtractionConfig是一个无默认值的生成数据类所有被省略的字段都会保持 Rust 侧的默认设置参见 packages/dart/README.md 中build it from JSON的用法说明。4. 调用 extract 并读取结果final result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].content);XbergBridge.extract返回一个结果对象其中results数组按输入顺序对应每份文档的抽取结果。单文档场景固定取results[0]其content字段即为抽取出的正文。提取结果还包含mimeType等元信息e2e 测试中会断言result.results[0].mimeType等于输入 MIME见 e2e/dart/test/extract_test.dart。通过配置控制 DOCX 提取细节空配置是起点但不是唯一选项。xberg 支持六种输出格式纯文本、Markdown、Djot、HTML、JSON 树、Docling DocTagsDOCX 提取器会依据OutputFormat决定正文渲染形态。同一批 e2e 测试展示了带格式配置的用法见 e2e/dart/test/format_specific_test.dartfinal config await createExtractionConfigFromJson( json: {output_format:markdown}, ); final result await XbergBridge.extract(input, config: config); expect(result.results[0].content, contains(r$));这条测试验证的是DOCX 中的公式以 LaTeX 数学形式输出到 Markdown 正文中content含$分隔符。如果你处理的是含公式、表格或图片的 Word 文档可以按需组合output_format、extract_tables、extract_images等字段对扫描版 Word 转 PDF 场景还可叠加force_ocr与ocr.backend如tesseract。底层调用链从 Dart 到 Rust DOCX 解析器理解调用链有助于排查问题。Dart 侧XbergBridge.extract经由 FRB 落到 Rust 侧后依次经过API 处理层extract_handler统一接收输入与配置合并默认配置并执行 URI 策略校验见 crates/xberg/src/api/handlers.rs。校验不通过的本地 URI 会被拒绝这解释了为什么 e2e 测试需要通过CRAWLBERG_ALLOW_PRIVATE_NETWORK环境变量放行 mock 服务器见 e2e/dart/test/format_specific_test.dart。批量提取入口extract_unified_inputs将ApiExtractInput转换为核心ExtractInput后调用extract_batch见 crates/xberg/src/api/handlers.rsextract_batch最终交由全局默认引擎执行见 crates/xberg/src/core/extract/mod.rs。DOCX 专用提取器引擎按 MIME/格式识别结果路由到crates/xberg/src/extractors/docx.rs其核心函数parse_docx_core调用crates/xberg/src/extraction/docx/parser的parse_document一次性产出文本、表格、页面边界、绘图含图片关系以及内部文档结构见 crates/xberg/src/extractors/docx.rs。这意味着一次extract调用拿到的content不只是裸文本——表格、图片占位、页眉页脚等都会被按输出格式组织进正文。测试与断言如何验证提取成功关联场景在仓库中有三层可验证证据e2e 断言format_specific_test.dart中对应测试断言result.results[0].content.length大于等于 20见 e2e/dart/test/format_specific_test.dart即提取不报错且确实产出了非空正文。fixture 定义fixtures/format_specific/format_docx_standalone.json定义了该场景的 mock 行为——/docx/fake.docx返回 200 与 DOCX MIME 头正文来自test_documents/docx/fake.docx断言为not_errorcontent最小长度 20见 fixtures/format_specific/format_docx_standalone.json。mock 服务器由 e2e/dart/test/e2e_helpers.dart 中的startMockServer启动。Rust 侧单测DOCX 解析器的解析、预算控制与安全限制等细节可在crates/xberg/src/extractors/docx.rs及其对应测试中继续深挖。运行与验证在仓库内运行该 e2e 用例的方式与仓库其他 Dart 测试一致启动 mock 服务器或通过MOCK_SERVER_URL/SUT_URL指向现成被测服务然后执行dart test。作为快速验证也可以把上文完整示例保存为main.dart在配置好原生库的 Dart 环境中直接运行观察标准输出中的正文内容。需要注意的是本文示例中的uri指向https://example.com/docx/fake.docx这是 fixture 的占位地址在实际项目中应替换为真实的文档地址并确保该地址在CRAWLBERG_ALLOW_PRIVATE_NETWORK允许的访问策略范围内默认仅允许公网 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 C 绑定实战使用 ExtractAsync 独立提取 DOCX 文档内容xberg C 绑定实战使用 ExtractAsync 独立提取 DOCX 文档内容 本文是一份面向 .NET / C 开发者的实操指南围绕 xberg 提后端AI 应用NLPXberg Elixir 绑定实战用 extract API 完成 DOCX 文档独立提取Xberg Elixir 绑定实战用 extract API 完成 DOCX 文档独立提取 本篇指南围绕 Xberg 项目 Elixir 绑定中的 forma后端AI 应用NLPXberg Dart 绑定 URI 提取实战从 URL 与本地路径抽取文档内容Xberg Dart 绑定 URI 提取实战从 URL 与本地路径抽取文档内容 本篇技术指南聚焦 Xberg 项目中 Dart 语言绑定的 URI 提取 AP后端AI 应用NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表