ARTICLE DETAIL

资讯详情

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

使用 xberg Go SDK 独立提取 HWPX 文档:基于 extract 的完整实践指南

使用 xberg Go SDK 独立提取 HWPX 文档:基于 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 开源仓库中 Go 语言端到端示例 format_hwpx_standalone.md 为核心介绍如何通过 Go 绑定调用xberg.Extract从 URL 独立提取 HWPX韩文文字处理器 XML文档并结合底层 Rust 提取器实现说明 MIME 识别、解析管线、安全限制与结构化输出细节。读完本文你将掌握用一段可运行的 Go 代码完成 HWPX 文本抽取并理解其背后从 ZIP 包到纯文本的完整链路。HWPX 格式与 xberg 的支持方式HWPXHangul Word Processor XMLOpen HWPML是韩文办公软件 HWP 的下一代开放格式它抛弃了旧版二进制 HWP 5.0 结构改用ZIP 容器 XML 章节的方式组织文档内容。xberg 通过unhwpcrate 解析该格式提取正文文本、标题、表格与图片。在 crates/xberg/src/extractors/hwpx.rs 中提取器插件声明fn supported_mime_types(self) - [str] { [application/haansofthwpx, application/hwpzip] }application/haansofthwpxHWPX 的标准媒体类型也是本示例中MimeType使用的值application/hwpzipHWPX 包内mimetype条目存储的声明值用于格式探测。在 crates/xberg/src/core/mime.rs 中可以看到 HWPX 的格式注册与探测逻辑扩展名hwpx映射到application/haansofthwpx同时通过检查 ZIP 包内是否包含Contents/content.hpf清单条目来确认包的真实身份MIME 快照条目与清单双重校验这保证了一个伪装成普通 ZIP 的 HWPX 文件也能被正确路由到专属提取器。独立提取完整 Go 代码示例原文档提供了一个完整、可直接编译运行的 Go 程序。其核心是构造一个xberg.ExtractInput调用xberg.Extract(input, config)随后打印result.Results[0].Contentpackage main import ( fmt xberg github.com/xberg-io/xberg/packages/go ) func ptrT any *T { return value } func main() { input : xberg.ExtractInput{ Kind: ptr(xberg.ExtractInputKindURI), URI: ptr(https://example.com/hwpx/simple.hwpx), MimeType: ptr(application/haansofthwpx), Filename: ptr(simple.hwpx), } config : xberg.ExtractionConfig{} result, err : xberg.Extract(input, config) if err ! nil { panic(err) } fmt.Printf(%v\n, result.Results[0].Content) }这段代码走的是URI 输入 空配置的默认路径不指定任何提取选项直接拿到Results[0].Content纯文本内容。这正是 fixtures/format_specific/format_hwpx_standalone.json 定义的端到端用例的 Go 形态——该 fixture 以 mock server 返回simple.hwpx并断言结果非空且包含Hello from HWPX。ExtractInput 字段详解从 bytes 到 URIxberg.ExtractInput定义在 packages/go/binding.go约 7385 行起字段如下字段类型说明Kind*ExtractInputKind输入来源类型。uri表示本地路径、file://URI 或 HTTP(S) URLbytes表示直接传入原始字节Bytes[]bytekind bytes时使用的原始内容URI*stringkind uri时使用的本地路径、file://URI 或 HTTP(S) URLMimeType*stringMIME 类型提示用于格式识别HWPX 为application/haansofthwpxFilename*string文件名提示同时用于 MIME 探测与元数据Config*FileExtractionConfig针对单个输入的提取覆盖项注意Kind、URI、MimeType、Filename全部是指针类型示例中的ptr[T]泛型辅助函数就是为构造这些指针而定义的。Kind的合法值见ExtractInputKindURI uripackages/go/binding.go。底层调用链为Extract将输入与配置序列化为 JSON → 经 cgo 调用xberg_extract_input_from_json/xberg_extract→ Rust 核心完成提取后序列化回ExtractionResult再反序列化为 Go 结构体见 packages/go/binding.go。因此ExtractInput的 JSON 字段名kind、uri、mime_type、filename与 Rust 侧ExtractInput的 serde 字段完全一致。空配置与常见提取选项示例中使用xberg.ExtractionConfig{}空配置等价于使用全部默认值。若需要调整提取行为可参考 fixture 中其他用例与 ExtractionConfig 结构体常用选项包括OutputFormat输出格式如Markdown默认CommonMark 兼容、Djot、Plain。例如 format_docx_equations 中通过{output_format:markdown}让 DOCX 公式以 LaTeX 形式进入 Markdown 输出——HWPX 提取器同样会把公式渲染为公式元素。IncludeHeaders/IncludeFooters是否包含文档页眉页脚内容。HWPX 提取器将页眉/页脚段落标记为ContentLayer::Header/ContentLayer::Footer供下游过滤见 crates/xberg/src/extractors/hwpx.rs 中push_header_footer_paragraphs的实现注释。SecurityLimits安全限制如max_archive_size提取器会拒绝超过该上限的 HWPX 文件见下文。由于 HWPX 提取器支持的是 ZIP 类容器ExtractionConfig中与归档安全相关的字段如max_archive_size会直接影响该格式的可用性。底层原理从 ZIP 容器到结构化文档HWPX 提取器的核心实现位于 crates/xberg/src/extractors/hwpx.rs整体流程如下大小校验与解包extract_content首先校验文件大小是否超过security_limits.max_archive_size然后用zip::ZipArchive打开容器Zip 炸弹防护调用ZipBombValidator::validate检查 ZIP 中央目录中声明的压缩比与尺寸防止解压炸弹源码注释明确指出中央目录声明不可全信因此还以MAX_HWPX_MEMBER_SIZE 100 MB为上限用Read::take限定单个成员的读取量公式预扫描collect_section_formulas遍历Contents/section*.xml收集每个章节内hp:equation的 EQEdit 脚本并通过unhwp::equation::to_latex转换为 LaTeXHWP 公式使用独立于 MathML 的脚本 DSL。由于 Hangul 常把公式写进 run 中而被unhwp跳过这一步保证了公式不被遗漏结构解析unhwp::parse_bytes解析整个包得到Document模型内部文档构建build_hwpx_internal_document遍历章节内容将段落含标题层级识别、表格单元格展平为字符串网格、表头行填充Table.columns、图片经mime_to_format识别 PNG/JPEG/SVG/WMF/EMF 等资源类型、脚注[^n]标记 定义、超链接字节偏移注解逐类送入InternalDocumentBuilder。值得注意的细节均有源码注释佐证脚注正文中出现[^1]占位符同时生成独立的脚注定义元素页眉页脚默认读取并标记层级可由include_headers/include_footers控制是否保留表格内图片当前实现会发出警告并跳过单元格内的图片见cell_plain_text中的 warning 逻辑缺失资源若图片引用在资源表中找不到对应条目会发出hwpx来源的处理警告而非静默崩溃。端到端验证与测试对照Go 侧端到端测试位于 e2e/go/format_specific_test.go 的Test_FormatHwpxStandalone它通过环境变量MOCK_SERVER_FORMAT_HWPX_STANDALONE缺省回退到MOCK_SERVER_URL /fixtures/format_hwpx_standalone获得 mock URL构造与示例完全一致的输入 JSON断言结果长度 ≥ 20 且内容包含Hello from HWPX。对应的 fixture fixtures/format_specific/format_hwpx_standalone.json 定义了 mock 响应{ path: /hwpx/simple.hwpx, status_code: 200, headers: { content-type: application/haansofthwpx }, body_file: ../test_documents/hwpx/simple.hwpx }这表明示例中的https://example.com/hwpx/simple.hwpx在实际运行时通常指向本地 mock 服务而非真实公网地址content-type与示例中MimeType字段一致即使 HTTP 响应头缺失显式传入的 MIME 提示也能保证路由正确。这与源码中should_detect_hwpx_without_a_content_hpf_from_its_mimetype_entry等测试crates/xberg/src/core/mime.rs相互印证格式识别同时依赖 MIME 提示、扩展名与包内清单特征。实践要点小结MIME 提示建议显式给出虽然Filename: simple.hwpx已携带扩展名但显式传application/haansofthwpx能避免依赖 ZIP 探测路径尤其是包内缺少Contents/content.hpf清单的畸形 HWPX 文件URI 输入适用于远程/本地文件本地场景可把URI换成文件系统路径或file://URI内存数据场景则改用Kind bytesBytes默认空配置即可完成纯文本抽取ExtractionConfig{}下Content即为文档纯文本需要 Markdown、页眉页脚或结构元素时再按需填充配置安全边界由配置控制处理不可信来源的 HWPX 文件时通过SecurityLimits收紧max_archive_size底层还有压缩比校验与成员读取上限双重防护。至此你可以将示例代码复制进自己的 Go 项目中替换URI为目标 HWPX 地址即可获得结构化抽取结果需要进一步深入解析逻辑时可继续阅读 crates/xberg/src/extractors/hwpx.rs 与其内部 20 余个针对公式扫描、脚注、链接注解、页眉页脚、表格表头等行为的单元测试。赞分享后端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 实战使用 extract API 对 HWPX 韩文办公文档进行独立文本提取Xberg C FFI 实战使用 extract API 对 HWPX 韩文办公文档进行独立文本提取 本篇技术指南围绕 XbergRust 核心的 Poly后端AI 应用NLPXberg Elixir 绑定实战用 extract API 完成 DOCX 文档独立提取Xberg Elixir 绑定实战用 extract API 完成 DOCX 文档独立提取 本篇指南围绕 Xberg 项目 Elixir 绑定中的 forma后端AI 应用NLP使用 Xberg 在 Elixir 中提取 HWPX韩文文档内容独立提取实战与源码级解析使用 Xberg 在 Elixir 中提取 HWPX韩文文档内容独立提取实战与源码级解析 HWPXOpen HWPML是韩文办公软件 Hangul W后端AI 应用NLP上一篇get-shit-done 的 /gsd:autonomous 自治里程碑工作流一次跑完 Discuss → Plan → Execute 全链路下一篇Agno AgentOS 多框架集成实战用一套运行时同时服务 Agno、Claude Code、LangGraph 与 DSPy Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表