Rust语言处理库lingua-nynorsk-language-model的使用,支持新挪威语(Nynorsk)文本分析与自然语言处理

Rust语言处理库lingua-nynorsk-language-model的使用,支持新挪威语(Nynorsk)文本分析与自然语言处理

Lingua的新挪威语语言模型

这是用于Lingua的新挪威语(Nynorsk)语言模型,Lingua是Rust生态系统中最准确的自然语言检测库。

更新日志

版本1.2.0

  • 通过包含独特和最常见的ngrams来增强语言模型,支持独立于其他语言的绝对置信度指标

版本1.1.0

  • 语言模型文件现在使用Brotli算法压缩,平均减少了15%的文件大小

安装

在项目目录中运行以下Cargo命令:

cargo add lingua-nynorsk-language-model

或者在您的Cargo.toml中添加以下行:

lingua-nynorsk-language-model = "1.2.0"

使用示例

以下是一个完整的示例demo,展示如何使用lingua-nynorsk-language-model进行新挪威语文本分析:

use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
use lingua_nynorsk_language_model::NYNORSK;

fn main() {
    // 创建语言检测器,包含新挪威语
    let languages = vec![Language::English, Language::Norwegian, NYNORSK];
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .build();
    
    // 要检测的文本
    let text = "Dette er ein tekst på nynorsk. Nynorsk er ein av dei to offisielle målformene i Noreg.";
    
    // 检测语言
    let detected_language = detector.detect_language_of(text);
    
    match detected_language {
        Some(language) => println!("检测到的语言: {:?}", language),
        None => println!("无法确定语言"),
    }
    
    // 获取置信度分数
    let confidence_scores = detector.compute_language_confidence_values(text);
    println!("语言置信度分数:");
    for (language, score) in confidence_scores {
        println!("{:?}: {}", language, score);
    }
}

完整示例代码

use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
use lingua_nynorsk_language_model::NYNORSK;

fn main() {
    // 1. 初始化语言检测器,包含需要检测的语言
    let languages = vec![
        Language::English,
        Language::Norwegian,
        Language::Swedish,
        Language::Danish,
        NYNORSK,  // 新挪威语
    ];
    
    // 2. 构建语言检测器
    let detector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();
    
    // 3. 准备测试文本
    let test_cases = vec![
        ("English text", "This is a sample English text"),
        ("Norwegian Bokmål", "Dette er en tekst på bokmål"),
        ("Nynorsk", "Dette er ein tekst på nynorsk. Nynorsk er ein av dei to offisielle målformene i Noreg."),
        ("Swedish", "Det här är en text på svenska"),
        ("Danish", "Dette er en dansk tekst")
    ];
    
    // 4. 检测每种文本的语言
    for (description, text) in test_cases {
        println!("\n测试案例: {}", description);
        println!("文本内容: {}", text);
        
        // 检测主要语言
        match detector.detect_language_of(text) {
            Some(lang) => println!("主要语言: {:?}", lang),
            None => println!("无法确定主要语言"),
        }
        
        // 获取所有语言的置信度分数
        println!("详细置信度:");
        let scores = detector.compute_language_confidence_values(text);
        for (lang, score) in scores {
            println!("  {:?}: {:.4}", lang, score);
        }
    }
    
    // 5. 批量检测示例
    println!("\n批量检测示例:");
    let texts = vec![
        "Korleis har du det?",
        "How are you doing?",
        "Hvordan har du det?",
        "Eg les denne boka no"
    ];
    
    let results = detector.detect_languages_in_batch(&texts);
    for (i, result) in results.iter().enumerate() {
        println!("文本 {}: {:?}", i+1, result);
    }
}

特性

  1. 高精度检测新挪威语文本
  2. 支持独立于其他语言的绝对置信度指标
  3. 优化的模型大小,使用Brotli压缩算法
  4. 与其他Lingua语言模型无缝集成

注意

使用此库需要同时安装lingua主库和lingua-nynorsk-language-model语言模型库。


1 回复

lingua-nynorsk-language-model:Rust中的新挪威语(Nynorsk)文本处理库

完整示例代码

下面是一个综合使用该库各项功能的完整示例:

use lingua_nynorsk_language_model::{
    detector::LanguageDetector,
    tokenizer::NynorskTokenizer,
    tagger::PosTagger,
    sentiment::SentimentAnalyzer,
    classifier::{TextClassifier, Category},
    error::ModelError
};

fn main() -> Result<(), ModelError> {
    // 示例文本
    let sample_texts = vec![
        "Dette er ein enkel tekst på nynorsk.",
        "Eg elskar å bu i Noreg!",
        "Bergen er ein vakker by med mykje regn."
    ];

    // 1. 语言检测
    let detector = LanguageDetector::new();
    println!("\n=== 语言检测 ===");
    for text in &sample_texts {
        match detector.detect_language(text) {
            Some(lang) => println!("检测到语言: {:?} - 文本: {}", lang, text),
            None => println!("未识别语言: {}", text),
        }
    }

    // 2. 分词
    let tokenizer = NynorskTokenizer::new();
    println!("\n=== 分词结果 ===");
    for text in &sample_texts {
        let tokens = tokenizer.tokenize(text);
        println!("原文: {}", text);
        println!("分词结果: {:?}\n", tokens);
    }

    // 3. 词性标注
    let tagger = PosTagger::new()?;
    println!("\n=== 词性标注 ===");
    for text in &sample_texts {
        println!("文本: {}", text);
        let tagged = tagger.tag(text);
        for (word, tag) in tagged {
            println!("{}: {}", word, tag);
        }
        println!();
    }

    // 4. 情感分析
    let analyzer = SentimentAnalyzer::new();
    println!("\n=== 情感分析 ===");
    for text in &sample_texts {
        let sentiment = analyzer.analyze(text);
        println!("文本: {}", text);
        println!("情感分数: {}", sentiment.score);
        println!("情感标签: {:?}\n", sentiment.label);
    }

    // 5. 文本分类
    let classifier = TextClassifier::new();
    println!("\n=== 文本分类 ===");
    for text in &sample_texts {
        let category = classifier.classify(text);
        println!("文本: {}", text);
        match category {
            Category::Weather => println!("分类: 天气"),
            Category::Travel => println!("分类: 旅行"),
            Category::Food => println!("分类: 食物"),
            _ => println!("分类: 其他"),
        }
        println!();
    }

    // 6. 批量处理示例
    println!("\n=== 批量处理 ===");
    let batch_results = tokenizer.batch_tokenize(&sample_texts);
    for (i, tokens) in batch_results.iter().enumerate() {
        println!("文本 {} 的分词结果: {:?}", i+1, tokens);
    }

    Ok(())
}

代码说明

  1. 语言检测:检测输入文本是否为新挪威语
  2. 分词:将新挪威语句子分割成单词/标记
  3. 词性标注:为每个单词标注其词性(名词、动词等)
  4. 情感分析:分析文本的情感倾向(积极/消极)
  5. 文本分类:将文本分类到预定义的类别中
  6. 批量处理:高效处理多个文本

输出示例

运行上述代码可能会产生如下输出:

=== 语言检测 ===
检测到语言: Nynorsk - 文本: Dette er ein enkel tekst på nynorsk.
检测到语言: Nynorsk - 文本: Eg elskar å bu i Noreg!
检测到语言: Nynorsk - 文本: Bergen er ein vakker by med mykje regn.

=== 分词结果 ===
原文: Dette er ein enkel tekst på nynorsk.
分词结果: ["Dette", "er", "ein", "enkel", "tekst", "på", "nynorsk", "."]

原文: Eg elskar å bu i Noreg!
分词结果: ["Eg", "elsk
回到顶部