后端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 为核心的 Polyglot 文档智能提取引擎官方 Dart 绑定通过 flutter_rust_bridge 生成桥接层可在 Dart/Flutter 中直接调用XbergBridge.extract完成文档解析。本文基于 xberg 仓库中的 Dart 语言检测片段讲解如何开启detect_multiple多语言检测、解读detectedLanguages返回的 ISO 639-3 语言码并深入 Rust 端源码说明多语言检测的分块聚合原理、置信度阈值行为以及结构化结果detectedLanguageConfidences的字段语义。读完本文你将掌握在 Dart 应用中为混合语种文档配置并消费多语言检测结果的完整方案。关联文档与适用场景本文对应的原始片段位于 docs-site/src/snippets-generated/dart/language-detection/language_detection_multilingual.md其主题是Enable multi-language detection and inspect every ISO 639-3 code that clears the confidence threshold开启多语言检测并检查所有越过置信度阈值的 ISO 639-3 语言码。该片段由 alef 工具链自动生成文件头部标注alef:hash与alef e2e generate对应的契约描述位于 fixtures/contract/language_detection_multilingual.json场景对一个来自https://example.com/markdown/comprehensive.md的 Markdown 文档执行extract断言调用不报错not_error且results[0].detected_languages至少包含 1 个语言码count_min: 1配置{language_detection: {enabled: true, min_confidence: 0.3, detect_multiple: true}}。这意味着本文适用于以下典型场景文档正文混有多种书写系统例如拉丁字母的英文段落与西里尔字母的俄文段落并存需要一次性拿到文档中包含的所有语种而不是只返回一个主语言。在 Dart 中开启多语言检测原始片段给出了一个完整、可直接运行的 Dart 程序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: {kind:uri,mime_type:text/markdown,uri:https://example.com/markdown/comprehensive.md}); final config await createExtractionConfigFromJson(json: {language_detection:{detect_multiple:true,enabled:true,min_confidence:0.3}}); final result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].detectedLanguages); } finally { RustLib.dispose(); } }关键步骤拆解如下初始化 Rust 运行时await RustLib.init()加载由 flutter_rust_bridge 生成的桥接层。桥接入口定义在 packages/dart/lib/src/xberg_bridge_generated/frb_generated.dartRustLib.dispose()放在finally中确保资源释放。构造提取输入createExtractInputFromJson接收 JSON 字符串指定kind: uri也可换为bytes直接传文件字节、mime_type: text/markdown与远端uri。该辅助函数与createExtractionConfigFromJson定义于 packages/dart/lib/src/xberg_bridge_generated/lib.dart。注入语言检测配置通过createExtractionConfigFromJson传入language_detection子对象其中三个字段分别是detect_multiple: true—— 关键开关让引擎按分块扫描返回文档中出现的所有语种而非单一主语言enabled: true—— 语言检测总开关min_confidence: 0.3—— 置信度阈值低于该值的语言会被过滤掉。调用提取并读取结果XbergBridge.extract返回的结果中results[0].detectedLanguages是ListString元素为 ISO 639-3 语言码如eng、rus、cmn。三个配置字段的语义与默认值LanguageDetectionConfig的 Rust 定义位于 crates/xberg/src/core/config/extraction/types.rs#[serde(deny_unknown_fields)] pub struct LanguageDetectionConfig { #[serde(default default_true)] pub enabled: bool, #[serde(default default_confidence)] pub min_confidence: f64, #[serde(default)] pub detect_multiple: bool, }各字段的默认值与行为字段默认值语义enabledtrue见default_true同文件 L601-L603语言检测总开关。关闭后detected_languages与detected_language_confidences均为空min_confidence0.8见default_confidence同文件 L625-L627置信度下限取值范围[0.0, 1.0]。原始片段显式设为0.3是为了让更多低置信度语种也能进入结果detect_multiplefalse是否按分块检测多个语种。false时只对全文做一次 whatlang 检测返回单一主语言两点值得注意结构体标有#[serde(deny_unknown_fields)]因此传入配置 JSON 时字段名必须严格匹配不能出现拼写错误或多余字段否则反序列化会失败。语言检测由后处理器LanguageDetector实现插件名为language-detection运行于ProcessingStage::Early只有当config.language_detection存在时才执行。其实现与单元测试位于 crates/xberg/src/language_detection/processor.rs核心逻辑在 crates/xberg/src/language_detection/mod.rs。多语言检测的底层原理200 字符分块聚合为什么detect_multiple: true能返回多个语种答案在 crates/xberg/src/language_detection/mod.rs 的detect_multiple_languages_details函数中。它不做全文一次性检测而是分块把文档文本按CHUNK_SIZE 200个字符切块该常量定义于同文件 L27按字符而非字节切分多字节 UTF-8 文本不会破坏字符边界。逐块检测对每一块调用 whatlang 的detect只有当该块对某个语言的置信度 min_confidence时才计入对应语言的聚合器LangAggregate记录块数count与置信度累加和confidence_sum。排序按被判定为该语言的块数降序排列块数相同则按 ISO 639-3 码字典序升序打破平局。聚合输出为每种语言计算confidence该语言所有块的置信度平均值confidence_sum / countproportion该语言的块数占总块数的比例注意未达到min_confidence的块不进入任何语言的计数但仍计入分母见 crates/xberg/src/types/extraction.rs 的注释script最近一次判定为该语言的块所使用的书写系统如Latin、Cyrillicreliable聚合置信度是否超过AGGREGATE_RELIABLE_THRESHOLD 0.9该常量定义于 mod.rs L19对齐 whatlang 自身的Info::is_reliable()阈值。如果所有块都没有达到min_confidence即lang_aggregates为空函数会回退到单语言检测模式detect_single_language_detailsmod.rs L247-L249避免在低置信度场景下返回空结果。而在单语言模式下proportion恒为1.0confidence取 whatlang 对全文的Info::confidence()。底层检测器是 whatlanguse whatlang::{Lang, detect}见 mod.rs L8语言码通过lang_to_iso639_3将 whatlang 的Lang枚举映射为标准 ISO 639-3 码mod.rs L279-L353覆盖 Eng、Rus、Cmn、Spa、Fra、Deu、Jpn、Kor、Ara、Hin 等数十种语言。结构化结果detectedLanguageConfidences除了 ISO 码列表XbergBridge.extract的结果还携带结构化字段detectedLanguageConfidencesDart 侧声明见 packages/dart/lib/src/xberg_bridge_generated/lib.dart对应 Rust 端LanguageConfidencecrates/xberg/src/types/extraction.rs。该类型在 1.1.0 版本引入alef(since 1.1.0)用于承载纯 ISO 码列表无法表达的信息字段类型含义languageStringISO 639-3 语言码与detectedLanguages中对应条目一致confidencedouble置信度[0.0, 1.0]。多语言模式下为归属该语言的 200 字符块的平均 whatlang 置信度proportiondouble该语言在文档分析内容中的占比[0.0, 1.0]即被判定为该语言的块数占总块数的比例scriptString书写系统名称例如Latin、Cyrillicreliablebool该检测是否可靠聚合置信度 0.9两个字段由同一个后处理器在Early阶段同时填充crates/xberg/src/language_detection/processor.rsdetectedLanguages是detectedLanguageConfidences中language字段的投影列表二者顺序一致。若检测失败或未启用两者同时置空。此外后处理器还提供了estimated_duration_ms估算按文本长度text_length / 1024估算最少 1ms可供上层调度参考。契约与测试佐证契约 fixturefixtures/contract/language_detection_multilingual.json 描述了与本文片段完全一致的请求extractlanguage_detection配置 远程 Markdown并断言results[0].detected_languages至少 1 项且整体不报错。处理器单元测试crates/xberg/src/language_detection/processor.rs 验证了在min_confidence: 0.8、detect_multiple: false下英文文本返回langs[0] eng同文件 L127-L140 验证未配置language_detection时结果为空L142-L179 验证插件接口与should_process门控逻辑。Dart 绑定侧detectedLanguages与detectedLanguageConfidences的序列化/反序列化桥接实现在 packages/dart/lib/src/xberg_bridge_generated/frb_generated.dart 与 L28238-L28283可确认两个字段通过 flutter_rust_bridge 完整传递到 Dart 层。完整可运行的 Dart 示例综合上文一个更完整的示例包含结构化结果的输出如下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: {kind:uri,mime_type:text/markdown,uri:https://example.com/markdown/comprehensive.md}); final config await createExtractionConfigFromJson( json: {language_detection:{detect_multiple:true,enabled:true,min_confidence:0.3}}, ); final result await XbergBridge.extract(input, config: config); final langs result.results[0].detectedLanguages; final details result.results[0].detectedLanguageConfidences; stdout.writeln(Detected languages (ISO 639-3): $langs); for (final detail in details ?? []) { stdout.writeln( ${detail.language}: confidence${detail.confidence.toStringAsFixed(2)}, proportion${detail.proportion.toStringAsFixed(2)}, script${detail.script}, reliable${detail.reliable}, ); } } finally { RustLib.dispose(); } }使用时注意该示例依赖 xberg Dart 包的桥接生成文件packages/dart/lib下的xberg_bridge_generated并需先完成 Rust 核心的编译产物接入参见 packages/dart/README.md。小结在 xberg 的 Dart 绑定中开启多语言检测只需在createExtractionConfigFromJson中设置language_detection.detect_multiple: true并配合enabled与min_confidence控制开关与灵敏度。Rust 端会按 200 字符分块调用 whatlang 逐块检测再按块数排序聚合最终通过detectedLanguagesISO 639-3 码列表与detectedLanguageConfidences语言码、置信度、占比、书写系统、可靠性五元组双通道返回结果。无论是判断文档主语言、统计混合语种占比还是为下游翻译、分类、检索任务筛选语言这套配置与数据结构都能直接满足需求。赞分享后端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 多语言检测实战用 DetectMultiple 识别混合语种文档并读取 ISO 639-3 置信度结果Xberg C 多语言检测实战用 DetectMultiple 识别混合语种文档并读取 ISO 639 3 置信度结果 导读 本文聚焦 Xberg 文档智能抽后端AI 应用NLP在 C 中使用 xberg 语言检测配置LanguageDetectionConfig识别文档语言的 ISO 639-3 编码在 C 中使用 xberg 语言检测配置LanguageDetectionConfig识别文档语言的 ISO 639 3 编码 语言检测是 xberg 文后端AI 应用NLPxberg 语言检测实战通过 C FFI 开启 Language Detection 并读取 ISO 639-3 结果xberg 语言检测实战通过 C FFI 开启 Language Detection 并读取 ISO 639 3 结果 在 xberg 的多格式文档智能管线中后端AI 应用NLP上一篇像素字体艺术Fusion Pixel Font如何重新定义数字时代的文字美学下一篇终极指南如何使用 nunif iw3 将普通2D视频转换为沉浸式VR 3D体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考