Rust语言处理库lingua-macedonian-language-model的使用:高效马其顿语自然语言处理与模型分析

Rust语言处理库lingua-macedonian-language-model的使用:高效马其顿语自然语言处理与模型分析

马其顿语语言模型

这是用于马其顿语的语言模型,被Rust生态系统中最准确的自然语言检测库Lingua所使用。

更新日志

版本1.2.0

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

版本1.1.0

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

安装

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

cargo add lingua-macedonian-language-model

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

lingua-macedonian-language-model = "1.2.0"

基本使用示例

以下是一个完整的Rust示例代码,展示如何使用lingua-macedonian-language-model进行马其顿语检测:

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

fn main() {
    // 创建语言检测器并包含马其顿语
    let languages = vec![Language::Macedonian];
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages).build();
    
    // 待检测的文本
    let text = "Здраво, како си? Ова е текст на македонски јазик.";
    
    // 检测语言
    let detected_language = detector.detect_language_of(text);
    
    match detected_language {
        Some(language) => println!("检测到的语言: {:?}", language),
        None => println!("无法确定语言"),
    }
    
    // 获取所有可能的语言及其置信度
    let confidence_values = detector.compute_language_confidence_values(text);
    println!("语言置信度:");
    for (language, confidence) in confidence_values {
        println!("{:?}: {:.4}", language, confidence);
    }
}

高级使用示例

以下是一个更完整的示例,展示如何加载马其顿语模型并进行更复杂的语言检测:

use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
use lingua_macedonian_language_model;

fn main() {
    // 包含多种语言进行检测
    let languages = vec![
        Language::Macedonian,
        Language::English,
        Language::Russian,
        Language::Bulgarian
    ];
    
    // 构建检测器
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();
    
    // 测试文本
    let texts = vec![
        "Ова е пример на македонски јазик.",
        "This is an example in English.",
        "Это пример на русском языке.",
        "Това е пример на български език."
    ];
    
    // 检测每段文本的语言
    for text in texts {
        println!("文本: {}", text);
        
        let result = detector.detect_language_of(text);
        match result {
            Some(lang) => println!("检测结果: {:?}", lang),
            None => println!("无法确定语言"),
        }
        
        // 显示所有语言的置信度
        let confidences = detector.compute_language_confidence_values(text);
        for (lang, confidence) in confidences {
            println!("  {:?}: {:.2}%", lang, confidence * 100.0);
        }
        println!("-----------------------");
    }
}

许可证

该项目使用Apache-2.0许可证。

完整示例demo

以下是一个结合文件读取和批量处理的完整示例:

use lingua::{Language, LanguageDetector, LanguageDetectorBuilder};
use lingua_macedonian_language_model;
use std::fs::File;
use std::io::{BufRead, BufReader};

fn main() {
    // 配置要检测的语言
    let languages = vec![
        Language::Macedonian,
        Language::English,
        Language::Russian,
        Language::Bulgarian,
        Language::Serbian,
    ];

    // 构建语言检测器
    let detector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();

    // 从文件读取文本
    if let Ok(file) = File::open("text_samples.txt") {
        let reader = BufReader::new(file);
        
        for (index, line) in reader.lines().enumerate() {
            if let Ok(text) = line {
                println!("样本 {}: {}", index + 1, text);
                
                // 检测语言
                let result = detector.detect_language_of(&text);
                match result {
                    Some(lang) => println!("  检测结果: {:?}", lang),
                    None => println!("  无法确定语言"),
                }
                
                // 获取置信度
                let confidences = detector.compute_language_confidence_values(&text);
                for (lang, confidence) in confidences {
                    println!("    {:?}: {:.2}%", lang, confidence * 100.0);
                }
                println!("{}", "-".repeat(30));
            }
        }
    } else {
        println!("无法打开文件 text_samples.txt");
        
        // 使用默认文本作为示例
        let default_texts = vec![
            "Ова е пример на македонски јазик.",
            "This is an example in English.",
            "Это пример на русском языке.",
            "Това е пример на български език.",
            "Ово је пример на српском језику."
        ];
        
        for text in default_texts {
            println!("文本: {}", text);
            
            let result = detector.detect_language_of(text);
            match result {
                Some(lang) => println!("  检测结果: {:?}", lang),
                None => println!("  无法确定语言"),
            }
            
            let confidences = detector.compute_language_confidence_values(text);
            for (lang, confidence) in confidences {
                println!("    {:?}: {:.2}%", lang, confidence * 100.0);
            }
            println!("{}", "-".repeat(30));
        }
    }
}

这个完整示例展示了:

  1. 从文件读取文本进行批量处理
  2. 包含更多相关语言(如塞尔维亚语)
  3. 优雅的错误处理和回退机制
  4. 更清晰的输出格式化
  5. 完整的错误处理流程

1 回复

根据您提供的完整内容,下面是一个综合使用lingua-macedonian-language-model库的完整示例代码:

// 引入必要的库和模块
use lingua_macedonian_language_model::MacedonianLanguageModel;
use std::sync::Arc;
use rayon::prelude::*;

fn main() {
    // 1. 初始化模型
    let model = MacedonianLanguageModel::new();
    
    // 2. 文本预处理示例
    let text = "Ова е пример на македонски текст со некои специјални знаци!@#";
    let processed = model.preprocess(text);
    println!("预处理后的文本: {}", processed);
    
    // 3. 语言检测示例
    let test_text = "Ова е текст напишан на македонски јазик.";
    let is_macedonian = model.detect_language(test_text);
    println!("检测结果 - 是否是马其顿语: {}", is_macedonian);
    
    // 4. 分词示例
    let tokens = model.tokenize("Здраво, како си?");
    println!("分词结果: {:?}", tokens);
    
    // 5. 情感分析示例
    let sentiment = model.analyze_sentiment("Ова е одличен ден!");
    println!("情感分析结果: {:?}", sentiment);
    
    // 6. 命名实体识别示例
    let entities = model.extract_entities("Скопје е главниот град на Македонија.");
    println!("识别到的实体: {:?}", entities);
    
    // 7. 文本相似度比较示例
    let similarity = model.compare_texts(
        "Македонски јазик", 
        "Словенски јазици"
    );
    println!("文本相似度: {}", similarity);
    
    // 8. 批处理示例
    let texts = vec![
        "Прв текст за анализа",
        "Втор текст за обработка",
        "Трет текст за тестирање"
    ];
    let batch_results = model.process_batch(&texts);
    println!("批处理结果: {:?}", batch_results);
    
    // 9. 多线程处理示例
    let model_arc = Arc::new(model);
    let threaded_results: Vec<_> = texts.par_iter().map(|text| {
        model_arc.process(text)
    }).collect();
    println!("多线程处理结果: {:?}", threaded_results);
    
    // 10. 错误处理示例
    match model.process("некој неважечки текст") {
        Ok(result) => println!("处理成功: {:?}", result),
        Err(e) => eprintln!("处理出错: {}", e),
    }
}

这个完整示例演示了:

  1. 模型初始化
  2. 文本预处理
  3. 语言检测
  4. 分词处理
  5. 情感分析
  6. 命名实体识别
  7. 文本相似度比较
  8. 批处理模式
  9. 多线程处理
  10. 错误处理

使用前请确保:

  1. 已在Cargo.toml中添加依赖
  2. 输入文本是UTF-8编码
  3. 对于长文本考虑分段处理
  4. 首次加载模型可能需要较长时间
回到顶部