
后端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 是一款以 Rust 为核心的跨语言文档智能引擎支持从 106 种格式、140 种扩展名的文件中提取文本、元数据、图片、表格与结构化数据。本文聚焦其 DOCX 公式提取能力通过 C# 绑定调用XbergConverter.ExtractAsync即可把 Word 文档中由 OMMLOffice Math Markup Language编码的数学公式以 LaTeX 数学标记的形式输出到 Markdown 结果中。读完本文你将掌握 C# 侧完整的调用姿势、输入/输出参数的精确含义并能从 Rust 源码层面理解 OMML→LaTeX 转换的实现原理。一个最小可运行的 C# 提取示例xberg 官方生成的 C# 端到端片段docs-site/src/snippets-generated/csharp/format_specific/format_docx_equations.md给出了完整可用的调用代码using System; using System.Text.Json; using Xberg; var ConfigOptions new JsonSerializerOptions { PropertyNameCaseInsensitive true }; var result await XbergConverter.ExtractAsync(new ExtractInput { Filename equations.docx, Kind JsonSerializer.DeserializeExtractInputKind(\uri\, ConfigOptions)!, MimeType application/vnd.openxmlformats-officedocument.wordprocessingml.document, Uri https://example.com/docx/equations.docx }, new ExtractionConfig { OutputFormat OutputFormat.Markdown }); Console.WriteLine(result.Results[0].Content);这段代码的核心动作只有三步构造ExtractInput指明文档来源Kind uri、文件名、MIME 类型与远程 URI构造ExtractionConfig将输出格式设为OutputFormat.Markdown调用XbergConverter.ExtractAsync并打印result.Results[0].Content。ExtractAsync的入口定义于 C# 绑定 packages/csharp/src/Xberg/XbergConverter.cspublic static class XbergConverter暴露了public static async TaskExtractionResult ExtractAsync(ExtractInput input, ExtractionConfig config)与上述调用一一对应。ExtractInput输入参数逐项拆解DOCX 公式提取的输入由ExtractInput描述示例中四个字段分别承担不同职责字段取值含义KindExtractInputKind.Uri数据来源类型。示例用uri表示从远程地址拉取文档xberg 同样支持bytes内存二进制等输入方式Filenameequations.docx目标文件名用于内容嗅探与格式识别辅助MimeTypeapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentDOCX 的标准 MIME 类型帮助引擎快速确定解析器Urihttps://example.com/docx/equations.docx文档实际下载地址示例中的地址为演示占位实际使用时替换为真实可访问的 URL其中Kind通过JsonSerializer.DeserializeExtractInputKind(\uri\, ConfigOptions)从字符串反序列化ConfigOptions开启了PropertyNameCaseInsensitive以保证字段名大小写容错。同样的输入约定也反映在端到端测试夹具 fixtures/format_specific/format_docx_equations.json 中其extract_input声明了kind: uri、uri: $mock_url/docx/equations.docx、DOCX 的 MIME 类型与filename: equations.docx并由 mock 服务器以 200 状态码返回equations.docx内容。也就是说提取公式这一行为与文档的获取途径解耦——只要喂给引擎的是合法 DOCX无论来自 URL 还是本地字节公式都会被转为 LaTeX。配置输出格式为什么必须选 Markdown示例将ExtractionConfig.OutputFormat设为OutputFormat.Markdown这是公式以 LaTeX 形式呈现的前提。xberg 的 Markdown 输出路径在 DOCX 渲染层中会把携带数学信息的文本片段渲染为两种 LaTeX 包裹形态见 crates/xberg/src/extraction/docx/parser.rs 的to_markdown行内公式inline math$...$对应 DOCX 中的m:oMath元素行间公式display math$$...$$对应 DOCX 中的m:oMathPara元素。因此夹具中的断言contains $fixtures/format_specific/format_docx_equations.json本质上就是在验证提取结果中确实出现了 LaTeX 数学定界符证明公式已被成功转换而不是丢失或退化为纯文本。输出解读结果里的$与$$result.Results[0].Content是 Markdown 文本其中公式部分形如$x^2$、$$\sum_{i1}^{n} i$$。这类输出可以直接嵌入支持 LaTeX 数学渲染的 Markdown 渲染器如 KaTeX、MathJax进行展示也可以继续参与下游的文本处理管道。值得说明的是Content中除公式外还包含文档的普通文本、标题与段落结构公式并非以单独的 API 返回而是作为 Markdown 内容流的一部分与正文混排——这正是提取为 Markdown这一输出格式的设计意图。原理纵深OMML → LaTeX 转换器源码解析DOCX 中的公式以 OMMLOffice Math Markup Language形式存储在文档 XML 里。xberg 的核心实现位于 crates/xberg/src/extraction/docx/math/mod.rs其模块注释开门见山这是一个OMML 到 LaTeX 的转换器。流式解析的分流点DOCX 解析器采用流式 XML 遍历基于quick_xml。当遇到m:oMathPara或m:oMath起始标签时控制权被移交给两个入口函数crates/xberg/src/extraction/docx/math/mod.rscollect_and_convert_omath_para收集m:oMathPara子树并渲染为行间公式display mathcollect_and_convert_omath收集m:oMath子树并渲染为行内公式inline math。两个函数都先把子树收集为一棵MathNode树再递归渲染为 LaTeX 字符串oMathPara中多个公式段落之间以\\\\连接。MathNode 语法树转换的核心数据结构是MathNode枚举crates/xberg/src/extraction/docx/math/mod.rs它把 OMML 的各种数学结构抽象成与 LaTeX 一一对应的节点MathNode 变体对应 LaTeX 输出说明Run纯文本m:r/m:t中的普通字符符号映射见 math_symbols.rsSSup/SSub/SSubSupbase^{sup}/base_{sub}/base_{sub}^{sup}上标、下标、混合上下标Frac\frac{num}{den}分数区分 Bar/NoBar/Linear/Skewed 四种形式Rad\sqrt{body}或\sqrt[deg]{body}根式支持次数隐藏deg_hideNary\sum_{sub}^{sup}{body}N 元运算符求和、积分等支持上下限隐藏Delim\left(...\right)定界符括号、绝对值竖线等含分隔符sep_chrFunc\funcname{body}函数名如\sin、\logAcc\hat{body}重音/帽子标记EqArr\begin{aligned}...\end{aligned}公式数组/多行对齐LimLow/LimUpp\underset{lim}{body}/\overset{lim}{body}下方/上方极限Bar上划线/下划线top: bool区分方向BorderBox\boxed{body}边框盒Matrix\begin{matrix}...\end{matrix}矩阵Group透传子节点m:box、m:phant等容器SPre{}_{sub}^{sup}{base}前置上下标渲染规则的落点递归渲染在 crates/xberg/src/extraction/docx/math/render.rs 中实现render_nodes遍历MathNode树render_frac拼出\frac{num}{den}render.rsrender_rad拼出\sqrtrender.rsrender_delim生成\left...\rightrender.rs。渲染过程中还受SecurityBudget约束mod.rs防止畸形文档导致资源耗尽体现了解析器的安全性设计。此外xberg 在同一模块族中还有 asciimath.rs、mathml/render.rs、typst_math.rs 等数学相关组件共同构成数学内容多格式互通的底层能力。端到端测试如何验证这条链路C# 侧的自动化验证位于 e2e/csharp/tests/FormatSpecificTests.cs 的Test_FormatDocxEquations通过环境变量MOCK_SERVER_FORMAT_DOCX_EQUATIONS或统一的MOCK_SERVER_URL定位 mock 服务将 JSON 输入中的$mock_url替换为真实地址断言result.Results[0].Content.Length 20确保确实提取出了内容断言内容包含$确保公式以 LaTeX 数学标记输出。这条测试与本文开头的 C# 片段同源生成文件头标注为 alef 自动生成、禁止手工编辑印证了示例代码可以直接在真实 xberg C# 绑定上运行也说明公式提取是仓库 CI 持续守护的契约行为。关键参考路径C# 调用示例docs-site/src/snippets-generated/csharp/format_specific/format_docx_equations.md端到端夹具输入/断言定义fixtures/format_specific/format_docx_equations.jsonC# 绑定入口packages/csharp/src/Xberg/XbergConverter.csOMML→LaTeX 转换器crates/xberg/src/extraction/docx/math/mod.rsLaTeX 渲染实现crates/xberg/src/extraction/docx/math/render.rsMarkdown 输出中的$/$$包裹逻辑crates/xberg/src/extraction/docx/parser.rsC# E2E 测试e2e/csharp/tests/FormatSpecificTests.cs如果你需要批量转换包含公式的 Word 文档只需复用同一个ExtractAsync调用、逐文档传入对应的ExtractInput并把OutputFormat.Markdown保持一致即可获得统一、可渲染的 LaTeX 数学输出。赞分享后端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 API 实战将 DOCX 文档中的公式提取为 LaTeX 数学标记format_docx_equations 场景解析xberg C API 实战将 DOCX 文档中的公式提取为 LaTeX 数学标记format_docx_equations 场景解析 本文围绕 xber后端AI 应用NLPXberg C FFI 提取独立 DOCX 文档xberg_extract 与 ExtractInput 实战解析Xberg C FFI 提取独立 DOCX 文档xberg_extract 与 ExtractInput 实战解析 本篇技术指南围绕 Xberg 开源仓库中的后端AI 应用NLPxberg C FFI 实战DOCX 文档提取的冒烟测试全解析xberg C FFI 实战DOCX 文档提取的冒烟测试全解析 本文围绕 xberg 仓库中一条自动生成的 C 语言冒烟测试样例展开它演示了如何通过 C F后端AI 应用NLP上一篇Zettlr 配置类语言语法高亮完全指南Dockerfile、TOML/INI、YAML 与 HCL/Terraform 实战详解下一篇mold 链接器 C20 编码规范深度解析i64 统一整数、克制 auto 与最小化继承的设计哲学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考