拓冰建站拓冰建站
首页 / 资讯中心 / 正文

在 C 中使用 xberg 语言检测配置(LanguageDetectionConfig):识别文档语言的 ISO 639-3 编码

后端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 文档智能提取管线中的一个后处理能力启用后每次ExtractAsync调用返回的文档结果都会附带检测到的语言编码列表便于下游按语言路由、过滤或标注内容。本篇以 C# 绑定为切入点完整讲解LanguageDetectionConfig的三个配置字段及其默认值、单语言与多语言两种检测模式的行为差异并结合仓库中 Rust 核心源码与端到端测试说明min_confidence阈值、200 字符分块机制与结果字段的真实含义。语言检测在 xberg 中的定位xberg 的核心提取管线由 Rust 实现语言检测是其中的一个可选后处理器post-processor。从源码结构看语言检测模块 基于whatlang。在管线中的实际挂载点是一个名为language-detection的后处理器LanguageDetector见 processor.rs。它运行在ProcessingStage::Early阶段只有当配置中携带了language_detection块should_process判断config.language_detection.is_some()时才会执行执行结果写入ExtractedDocument的两个字段detected_languagesISO 编码列表与detected_language_confidences结构化置信度明细。也就是说不配置language_detection提取结果中就不会有语言信息。LanguageDetectionConfig 字段与默认值LanguageDetectionConfig在 Rust 侧定义于 core/config/extraction/types.rsC# 侧对应的强类型 record 位于 LanguageDetectionConfig.cs。两个语言版本的字段完全一一对应字段C#序列化名类型默认值含义Enabledenabledbooltrue是否启用语言检测MinConfidencemin_confidencedouble0.8最低置信度阈值取值范围0.0–1.0DetectMultipledetect_multipleboolfalse是否检测文档中的多种语言三个要点需要特别注意Enabled默认就是true因此在 C# 中new LanguageDetectionConfig()即等价于一个开启检测、单语言模式、阈值为 0.8 的配置。真正关闭语言检测的方式是不设置ExtractionConfig.LanguageDetection保持null而不是把Enabled设为false——虽然两种方式都能让结果不带语言字段但null意味着后处理器根本不会进入处理流程。MinConfidence默认 0.8这是 whatlang 对整篇文档做一次检测时通常足够可靠的置信度门槛。调低如 0.3、0.5会接受更多模棱两可的判定调高如 0.99则只有几乎无歧义的语言才会被返回。DetectMultiple默认false只返回一个主要语言为true时走分块多语言检测路径详见下文。C# 最小可运行示例检测并读取 ISO 639-3 编码关联文档给出的示例是开启检测、单语言模式、阈值为 0.5从远程text/plain文档提取文本并打印检测结果。下面这段代码保留了原示例的完整逻辑并补全了命名空间与必要的类型引用可直接复制运行using System; using System.Text.Json; using Xberg; var ConfigOptions new JsonSerializerOptions { PropertyNameCaseInsensitive true }; var result await XbergConverter.ExtractAsync( new ExtractInput { Kind JsonSerializer.DeserializeExtractInputKind(\uri\, ConfigOptions)!, MimeType text/plain, Uri https://example.com/text/report.txt }, new ExtractionConfig { LanguageDetection new LanguageDetectionConfig { DetectMultiple false, Enabled true, MinConfidence 0.5d } }); Console.WriteLine(result.Results[0].DetectedLanguages);几点说明ExtractInput.Kind需要反序列化为ExtractInputKind枚举这里通过JsonSerializer.DeserializeExtractInputKind(\uri\, ...)把字符串uri转成枚举值PropertyNameCaseInsensitive保证 JSON 字段名大小写不敏感。只要文档文本能被 whatlang 以不低于MinConfidence的置信度识别DetectedLanguages就是一个非空列表。例如英文文档通常返回[eng]ISO 639-3 编码。该示例对应的端到端契约测试是 ContractTests.cs 中的Test_LanguageDetectionConfig它以同样的参数text/plain、min_confidence: 0.5断言result.Results[0].DetectedLanguages![0] eng可用于验证绑定行为。多语言模式DetectMultiple 与分块检测当文档包含多种语言如混合中英文的技术手册、多语言 UI 文案、国际新闻报道时把DetectMultiple设为true会启用分块检测。关联的多语言示例见 language_detection_multilingual.md展示了完整写法using System; using System.Text.Json; using Xberg; var ConfigOptions new JsonSerializerOptions { PropertyNameCaseInsensitive true }; var result await XbergConverter.ExtractAsync( new ExtractInput { Kind JsonSerializer.DeserializeExtractInputKind(\uri\, ConfigOptions)!, MimeType text/markdown, Uri https://example.com/markdown/comprehensive.md }, new ExtractionConfig { LanguageDetection new LanguageDetectionConfig { DetectMultiple true, Enabled true, MinConfidence 0.3d } }); Console.WriteLine(result.Results[0].DetectedLanguages);对应的端到端测试Test_LanguageDetectionMultilingualContractTests.cs使用text/markdown源与min_confidence: 0.3断言返回的语言列表至少包含一个元素。底层实现200 字符分块与聚合排序多语言模式的内部逻辑可以在 mod.rs 中完整看到其核心步骤为按字符分块CHUNK_SIZE 200模块内pub(crate)常量见 mod.rs把提取出的全文按每 200 个字符切成若干块。注意是按字符char切分天然兼容 CJK 等多字节文本。逐块检测并过滤对每个块调用 whatlang 的detect仅当info.confidence() min_confidence时才计入该语言的统计LangAggregate累加块数与置信度之和。回退逻辑如果没有任何一个块通过阈值lang_aggregates.is_empty()则自动回退到单语言模式对全文再做一次检测。排序输出按命中块数降序排列块数相同按 ISO 639-3 编码字典序打破平局保证结果确定性。置信度聚合每个语言返回的confidence是它所有命中块的 whatlang 置信度平均值proportion是命中块数占总块数的比例。为什么高阈值会压掉多语言结果官方指南特别提醒分块置信度通常低于整篇文档置信度。一段 200 字符的文本比整篇文档更容易让 whatlang 犹豫因此若把min_confidence设得过高例如维持默认 0.8大量真实语言块会被阈值过滤可能导致多语言模式下只返回极少数语言甚至触发回退。这正是多语言示例把阈值降到 0.3 的原因。反之若你只关心显著的语言信号可以调高阈值过滤掉偶发出现的噪声语言。结果字段DetectedLanguages 与 DetectedLanguageConfidences检测结果写入ExtractedDocumentC# 侧定义于 ExtractedDocument.csC# 属性类型说明DetectedLanguagesListstring?ISO 639-3 语言编码列表检测禁用、文本为空或无语言达到阈值时为nullDetectedLanguageConfidencesListLanguageConfidence?每个语言的结构化明细与DetectedLanguages顺序一一对应其中LanguageConfidence携带四个字段Rust 侧定义见 types/extraction.rs字段含义LanguageISO 639-3 编码如eng、spa、cmnConfidence置信度[0.0, 1.0]。单语言模式为 whatlang 对全文的Info::confidence()多语言模式为该语言所有命中块的置信度均值Proportion该语言占分析内容的比例[0.0, 1.0]。单语言模式恒为1.0多语言模式为命中块数 / 总块数Script检出的书写系统如Latin、CyrillicReliable是否可靠。单语言模式沿用 whatlang 内部 0.9 可靠阈值多语言模式对聚合后的均值置信度应用同一 0.9 阈值AGGREGATE_RELIABLE_THRESHOLD见 mod.rsISO 639-3 编码由lang_to_iso639_3映射生成mod.rs例如Lang::Eng eng。需要留意C# 绑定中DetectedLanguages的注释写的是 ISO 639-1 language codes但实际映射逻辑输出的是 ISO 639-3 三位编码与官方指南表述一致属绑定注释的遗留偏差编程时应按 ISO 639-3 处理返回值。配置注入方式全局配置与按文件覆盖LanguageDetectionConfig有两个注入位置全局配置挂在ExtractionConfig.LanguageDetection上C# 见 ExtractionConfig.cs作用于ExtractAsync的整次调用。按文件覆盖挂在FileExtractionConfig.LanguageDetection上FileExtractionConfig.cs用于批量提取时对单个文件单独覆盖语言检测参数——例如批量中多数文件是单语言、个别文件需要开启多语言检测。在 Rust 侧ExtractionConfig的language_detection字段默认None表示不检测见 配置参考同一配置参考文档中也确认FileExtractionConfig.language_detection支持按文件覆盖configuration.md。调参与边界行为速查完全不想要语言检测不要给ExtractionConfig.LanguageDetection赋值后处理器should_process返回false零开销跳过。只要主要语言DetectMultiple false默认。低于min_confidence时整个检测被丢弃DetectedLanguages为null。要全部语言DetectMultiple true并适当降低min_confidence0.3–0.5 是端到端测试采用的取值。空文本或纯无字母内容detect_language_details对text.trim().is_empty()直接返回Nonemod.rswhatlang 无法分类的块无字母内容不计入任何语言。性能提示LanguageDetector::estimated_duration_ms按text_length / 1024估算耗时processor.rs文本越长耗时越长多语言模式会逐块调用 whatlang开销随块数线性增长。结合文档与测试进一步验证官方语言检测指南语言检测指南 完整描述了两种模式与阈值行为是本文所有参数语义的第一手依据。全量配置参考configuration.md 收录了LanguageDetectionConfig的字段表格与ExtractionConfig.language_detection的默认值说明。C# API 参考api-csharp.md 提供XbergConverter.ExtractAsync的完整签名输入ExtractInputExtractionConfig。端到端契约测试ContractTests.cs 覆盖单语言与多语言两条路径可视为绑定正确性的验证基线。契约 fixtureslanguage_detection_config.json 与 language_detection_multilingual.json 提供了 mock 服务器侧对应的输入样例。Rust 单元测试mod.rs 内的#[cfg(test)]模块包含大量检测用例如eng/spa/cmn断言、多语言排序、min_confidence回归测试 GH#1223 等适合深入理解边界行为。语言检测是文档智能管线中成本极低、收益直接的一环一次配置即可让每次提取自动携带 ISO 639-3 编码与置信度明细为下游的多语言路由、语种过滤、机器翻译预处理等场景提供可靠输入。按本文给出的字段语义与调参建议你可以在 C# 应用中快速落地单语言与多语言两种检测方案。赞分享后端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 配置、ISO 639-3 输出与底层分块检测原理xberg 多语言文档语言检测实战C API 配置、ISO 639 3 输出与底层分块检测原理 本文围绕 xberg 仓库中 C 语言绑定的多语言检测示例后端AI 应用NLPxberg 语言检测实战通过 C FFI 开启 Language Detection 并读取 ISO 639-3 结果xberg 语言检测实战通过 C FFI 开启 Language Detection 并读取 ISO 639 3 结果 在 xberg 的多格式文档智能管线中后端AI 应用NLPxberg C FFI 多语言 OCR 配置实战以 Tesseract 语言列表识别多语种文档xberg C FFI 多语言 OCR 配置实战以 Tesseract 语言列表识别多语种文档 本篇技术文章聚焦 xberg 文档智能库的 C FFI 接口中后端AI 应用NLP上一篇FGO自动化革命从零到精通的Fate/Grand Automata实战指南下一篇Windows Defender完全移除终极指南5步彻底释放系统性能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门