
后端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 开源仓库中 metadata_access 关联文档 讲解如何在 Go 中通过xberg.Extract一次性获取文档的通用元数据标题、作者、语言、时间戳等与格式专属元数据如 HTML 的标题、描述、链接、结构化数据。你将掌握ExtractInput/ExtractionConfig的正确构造方式、Metadata与FormatMetadata的完整字段语义以及如何结合官方契约测试落地类型安全的元数据访问代码。一、为什么需要单独的元数据访问接口xberg 的 Go 绑定位于 packages/go/binding.go将底层 Rust 核心的提取能力封装为xberg.Extract(input, config)其返回值中的Results[0].Metadata就是文档提取的元数据产物。它分为两层通用元数据Metadata与文件格式无关的公共字段例如标题、作者、关键词、语言、创建/修改时间、页结构、OCR 使用情况等格式专属元数据FormatMetadata按具体格式展开的判别联合体discriminated union例如 HTML 的title、meta、h1~h6标题层级、链接与图片、JSON-LD 结构化数据等。在真实业务中这两层常常被同时消费先读通用字段做文档归类和检索再读格式专属字段做页面级分析例如从 HTML 中抽取目录结构与社交分享标签。本文的关联契约文档与对应测试 Test_MetadataAccess 展示的正是这种通用 HTML 专属混合访问的典型姿势。二、最小可运行示例完整继承契约文档代码关联文档给出的 Go 示例可以直接作为最小可运行程序它从远程 URI 提取一个 HTML 页面并同时打印通用元数据和 HTML 专属的标题字段package 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/html/simple_table.html), MimeType: ptr(text/html), } config : xberg.ExtractionConfig{} result, err : xberg.Extract(input, config) if err ! nil { panic(err) } fmt.Printf(%v\n, result.Results[0].Metadata) fmt.Printf(%v\n, result.Results[0].Metadata.Format.HTML.Title) }要点拆解ptr[T]泛型辅助函数ExtractInput的Kind、URI、MimeType字段均为指针类型Go 绑定采用指针表达可空字段对应 JSON 中omitempty语义因此示例定义了一个零成本的泛型取址函数避免逐字段写临时变量。Kind: ptr(xberg.ExtractInputKindURI)声明输入来源为 URI。ExtractInputKindURI是 Go 绑定中定义的枚举常量与 Rust 侧的ExtractInputKind::Uri对应除了 URI 之外还有 Bytes字节数组等来源见下文。MimeType: ptr(text/html)显式声明 MIME 类型帮助提取管线快速选择正确的提取器。若不确定也可留空让 xberg 自动探测。config : xberg.ExtractionConfig{}零值配置即可工作全部字段走默认行为。需要 OCR、分块、输出格式转换等能力时再填充该结构体。关于Metadata.Format.HTML是否为 nil 的健壮性问题当输入文档不是 HTML 时Format或Format.HTML可能为 nil。官方契约测试 contract_test.go 中先判断result.Results[0].Metadata.Format ! nil再访问Format.HTML.Headers生产代码建议同样先判空再解引用避免 nil panic。三、ExtractInput 输入构造URI 与 Bytes 两种来源ExtractInput定义于 packages/go/binding.go核心字段如下字段类型说明Kind*ExtractInputKind输入来源类型URI或BytesURI*string当Kind为 URI 时的目标地址http/https 远程地址Bytes[]byte当Kind为 Bytes 时的原始文档字节MimeType*string文档 MIME 类型可选但推荐显式指定Filename*string可选文件名辅助 MIME 探测与格式判断构造 Bytes 输入时只需替换 Kind 与 Bytesinput : xberg.ExtractInput{ Kind: ptr(xberg.ExtractInputKindBytes), Bytes: htmlBytes, MimeType: ptr(text/html), }从源码结构看Kind采用指针 枚举的组合是为了在 JSON 反序列化时保留未设置与显式设置的差别这与绑定层对可选字段的整体处理策略一致。四、通用元数据 Metadata 字段全景Metadata结构体定义见 packages/go/binding.go#L9874-L9935是每次提取都会尝试填充的公共信封。主要字段及其 JSON 键如下Go 字段JSON 键类型语义Titletitle*string文档标题Subjectsubject*string文档主题或描述Authorsauthors[]string主要作者列表固定为切片以保证一致性Keywordskeywords[]string关键词/标签列表Languagelanguage*string主语言ISO 639 代码CreatedAtcreated_at*string创建时间ISO 8601ModifiedAtmodified_at*string最后修改时间ISO 8601CreatedBycreated_by*string创建者ModifiedBymodified_by*string最后修改者Pagespages*PageStructure页/幻灯片/工作表结构含边界Formatformat*FormatMetadata格式专属元数据判别联合体ImagePreprocessingimage_preprocessing*ImagePreprocessingMetadataOCR 预处理元数据JSONSchemajson_schemajson.RawMessage结构化提取用的 JSON SchemaErrorerror*ErrorMetadata批处理错误元数据ExtractionDurationMsextraction_duration_ms*uint64提取耗时毫秒批处理场景由服务端填充Categorycategory*string文档类别frontmatter 或分类得到Tagstags[]string文档标签frontmatterDocumentVersiondocument_version*string文档版本字符串AbstractTextabstract_text*string摘要文本OutputFormatoutput_format*string输出格式标识如markdown、html、textOcrUsedocr_usedbool是否实际运行了 OCR 后端并采用其结果Additionaladditionalmap[string]json.RawMessage后处理器注入的自定义字段几个值得注意的实现事实OcrUsed只要管线运行过任意 OCR 后端Tesseract、PaddleOCR、VLM 等并以其输出作为主文本或回退文本即为truefalse表示全程使用原生文本提取。OutputFormat由输出格式管线阶段在应用格式转换时写入替代了旧版本中metadata.additional[output_format]的存放位置。Additional后处理器postprocessor写入的自定义字段统一收纳于此序列化为嵌套的additional对象而非拍平到根层级。ExtractionDurationMs注释明确说明该字段由批处理提取填充以提供逐文件计时单文件提取时为 nil使用外部计时。五、格式专属元数据 FormatMetadata判别联合体FormatMetadata定义于 packages/go/binding.go#L1740-L1794本质是一个带format_type判别字段的联合体。序列化时通过format_type区分当前命中的具体格式例如 JSON 中表现为{format_type:html,title:...}。目前支持的格式分支包括PdfPDF 版本、生产者、是否加密、首页宽高点、页数、疑似扫描页等DocxWord 文档专属元数据Excel电子表格元数据EmailEML/MSG 邮件元数据Pptx演示文稿元数据ArchiveZIP/TAR/7Z 等压缩包元数据Image位图/矢量图元数据XML/JatsXML 与 JATS 期刊文章元数据Text纯文本行数、词数、字符数及 Markdown 标题/链接/代码块HTML本节重点详见下文OcrOCR 管线产生的元数据CsvCSV/TSV 元数据Bibtex/Citation/FictionBook/Dbf/Epub/Pst/Audio其余长尾格式Codetree-sitter 可分析的源码元数据携带函数/类/模块边界等结构信息。使用时应先依据FormatType判断命中的分支再访问对应指针字段其余字段为 nil这正是判别联合体的标准用法。六、HTML 专属元数据详解本示例核心HTML 分支HTMLMetadata定义于 packages/go/binding.go#L8834-L8868字段语义如下Go 字段JSON 键来源Titletitletitle标签Descriptiondescriptionmeta namedescriptionKeywordskeywordsmeta namekeywords按逗号拆分Authorauthormeta nameauthorCanonicalURLcanonical_urllink relcanonicalBaseHrefbase_hrefbase href用于解析相对 URLLanguagelanguagelang属性TextDirectiontext_directiondir属性OpenGraphopen_graphog:*属性键为title、description、image、url等TwitterCardtwitter_cardtwitter:*属性MetaTagsmeta_tags未覆盖的其余 meta 标签name/property → contentHeadersheaders提取出的标题层级结构Linkslinks提取出的超链接含类型分类Imagesimages提取出的图片来源与尺寸StructuredDatastructured_data提取出的结构化数据块JSON-LD 等其中Headers的元素类型HeaderMetadatabinding.go#L8688-L8699包含Level1~6 对应 h1~h6、规范化后的Text、可选的 HTMLID属性、文档树深度Depth以及原始 HTML 中的字节偏移HTMLOffset——可用于构建文档目录与锚点定位。Links元素LinkMetadatabinding.go#L9446-L9459携带Href、规范化链接文本、Title属性、LinkType类型分类、Rel属性值列表及额外Attributes。StructuredDatabinding.go#L12035-L12042则给出DataType、原始 JSON 字符串RawJSON与可检测的SchemaType如Article、Event、Product适合接续做实体抽取。七、契约测试官方对行为的确切定义关联文档属于 alef 生成的契约测试夹具其可执行验证版本是 Test_MetadataAccess。该测试通过 mock 服务提供simple_table.html页面并断言返回结果的MimeType必须为text/htmlMetadata.Format.HTML.Title解析结果为Simple Table TestMetadata.Format.HTML.Headers长度至少为 2页面至少含两个标题元素访问Format前先做 nil 判空。这意味着元数据访问不仅是能编译而是有确定性的运行时契约——给定相同输入标题、MIME、标题层级都是可精确断言的值。你在自己的测试里同样可以按此模式对Title、Headers、OpenGraph等字段写断言形成可回归的元数据契约测试。八、典型应用场景与注意事项典型场景一文档资产编目。将Metadata的通用字段Title、Authors、Language、CreatedAt、ModifiedAt、Keywords、Category、Tags落库为检索系统提供结构化档案同时用OutputFormat记录输出形态。典型场景二网页爬取后的页面分析。从Format.HTML中读取Title/Description/OpenGraph/TwitterCard生成社交分享卡片用Headers生成目录用Links做链接图分析用StructuredData提取 JSON-LD 实体。注意要点判空优先Format及其各格式分支均为指针访问前必须判空参考契约测试写法。字段语义一致性Authors与Keywords固定为切片类型即使只有一个值也以切片呈现避免消费方类型分叉。时间字段为字符串CreatedAt/ModifiedAt为 ISO 8601 字符串而非 Gotime.Time需要自行解析或由反序列化层转换。可选字段用指针绑定中所有可空字段都是指针类型配合ptr[T]泛型辅助函数可写出简洁的构造代码。MIME 显式声明构造输入时显式给出MimeType可让管线跳过探测直接命中提取器对性能与确定性都有帮助。九、进一步阅读关联契约文档metadata_accessGo 绑定完整类型定义binding.go可执行契约测试Test_MetadataAccessGo 绑定 README 与安装方式packages/go/README.md赞分享后端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 绑定访问提取元数据通用字段与 HTML 格式特定元数据实战用 Xberg Dart 绑定访问提取元数据通用字段与 HTML 格式特定元数据实战 本篇实战指南围绕 Xberg 的 Dart 绑定flutter_rus后端AI 应用NLP在 Elixir 中访问 Xberg 提取元数据通用字段与格式专属字段的完整指南在 Elixir 中访问 Xberg 提取元数据通用字段与格式专属字段的完整指南 本文以 Xberg 的 Elixir 绑定为切入点讲解如何通过 Xberg后端AI 应用NLPXberg C 绑定实战用 ExtractAsync 读取通用与 HTML 格式专属的提取元数据Xberg C 绑定实战用 ExtractAsync 读取通用与 HTML 格式专属的提取元数据 在 Xberg 中一次文档提取extract不仅返回正后端AI 应用NLP上一篇告别Android开发痛点用RxTool构建零缺陷应用的完整测试方案下一篇零基础玩转 nowatermark如何用 20 行 Python 代码批量去除图片水印创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考