Rust语言模型库lingua-swahili-language-model的使用,支持斯瓦希里语自然语言处理和文本分析

Lingua的斯瓦希里语语言模型

这是用于斯瓦希里语的语言模型,由Rust生态系统中最准确的自然语言检测库Lingua使用。

更新日志

版本1.2.0

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

版本1.1.0

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

安装

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

cargo add lingua-swahili-language-model

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

lingua-swahili-language-model = "1.2.0"

完整示例代码

以下是一个使用lingua-swahili-language-model进行斯瓦希里语文本分析的完整示例:

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

fn main() {
    // 创建语言检测器并包含斯瓦希里语
    let languages = vec![Language::Swahili];
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();

    // 要分析的斯瓦希里语文本
    let text = "Habari ya dunia! Hii ni mfano wa maandishi ya Kiswahili.";

    // 检测语言
    let detected_language = detector.detect_language_of(text);

    // 输出结果
    match detected_language {
        Some(language) => println!("检测到的语言: {:?}", language),
        None => println!("无法确定语言"),
    }
}

这个示例展示了如何:

  1. 创建一个专门检测斯瓦希里语的语言检测器
  2. 分析斯瓦希里语文本
  3. 输出检测结果

完整示例DEMO

下面是一个更完整的示例,展示如何检测多种语言并获取置信度分数:

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

fn main() {
    // 创建支持多种语言的语言检测器
    let languages = vec![
        Language::Swahili,
        Language::English,
        Language::French,
    ];
    
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();

    // 要分析的文本
    let texts = vec![
        "Habari ya dunia! Hii ni mfano wa maandishi ya Kiswahili.",
        "Hello world! This is an example of English text.",
        "Bonjour le monde! Ceci est un exemple de texte français."
    ];

    // 检测每种文本的语言
    for text in texts {
        println!("分析文本: {}", text);
        
        // 检测最可能的语言
        let detected_language = detector.detect_language_of(text);
        match detected_language {
            Some(lang) => println!("  最可能的语言: {:?}", lang),
            None => println!("  无法确定语言"),
        }
        
        // 获取所有可能语言的置信度分数
        let confidence_values: Vec<LanguageDetectorResult> = detector.compute_language_confidence_values(text);
        println!("  语言置信度:");
        for result in confidence_values {
            println!("    {:?}: {:.4}", result.language(), result.value());
        }
        
        println!();
    }
}

这个完整示例展示了:

  1. 创建支持多种语言(斯瓦希里语、英语、法语)的检测器
  2. 批量分析多语言文本
  3. 获取最可能的语言检测结果
  4. 显示所有候选语言的置信度分数

文档

完整文档可以在docs.rs上找到。

所有权

  • Peter M. Stahl

分类

  • 文本处理

1 回复

Rust语言模型库lingua-swahili-language-model使用指南

简介

lingua-swahili-language-model是一个专门为斯瓦希里语(Kiswahili)设计的Rust语言模型库,用于自然语言处理(NLP)和文本分析任务。该库提供了处理斯瓦希里语文本的各种功能,包括分词、词性标注、情感分析等。

安装

在Cargo.toml中添加依赖:

[dependencies]
lingua-swahili-language-model = "0.1.0"  # 请检查最新版本号

基本使用

1. 文本分词

use lingua_swahili_language_model::tokenization;

fn main() {
    let text = "Habari za asubuhi! Jina langu ni Jamal.";
    let tokens = tokenization::tokenize(text);
    
    println!("分词结果: {:?}", tokens);
    // 输出: ["Habari", "za", "asubuhi", "!", "Jina", "langu", "ni", "Jamal", "."]
}

2. 词性标注

use lingua_swahili_language_model::pos_tagging;

fn main() {
    let text = "Ninaenda sokoni leo";
    let tagged = pos_tagging::tag(text);
    
    println!("词性标注结果:");
    for (word, tag) in tagged {
        println!("{}: {}", word, tag);
    }
    // 示例输出:
    // Ninaenda: VERB
    // sokoni: NOUN+LOC
    // leo: ADV
}

3. 情感分析

use lingua_swahili_language_model::sentiment;

fn main() {
    let text = "Hii ni kitabu kizuri sana! Nimefurahishwa na uandishi wake.";
    let analysis = sentiment::analyze(text);
    
    println!("情感分析结果:");
    println!("情感极性: {}", analysis.polarity);  // 可能是: positive
    println!("置信度: {:.2}", analysis.confidence);  // 例如: 0.85
}

高级功能

1. 文本相似度比较

use lingua_swahili_language_model::similarity;

fn main() {
    let text1 = "Mimi ni mwalimu";
    let text2 = "Mimi ni profesa";
    
    let score = similarity::compare(text1, text2);
    println!("文本相似度: {:.2}", score);  // 输出0到1之间的值
}

2. 关键词提取

use lingua_swahili_language_model::keywords;

fn main() {
    let text = "Tanzania ni nchi ya Afrika Mashariki. Ina vivutio vya utalii kama vile Kilimanjaro, Zanzibar na mbuga za wanyama.";
    
    let keywords = keywords::extract(text, 3);  // 提取3个关键词
    println!("关键词: {:?}", keywords);
    // 可能输出: ["Tanzania", "Kilimanjaro", "Zanzibar"]
}

性能优化

对于大量文本处理,可以使用批处理模式:

use lingua_swahili_language_model::{tokenization, pos_tagging};

fn main() {
    let texts = vec![
        "Habari za asubuhi",
        "Ninaenda kazini",
        "Leo ni siku nzuri"
    ];
    
    // 批量分词
    let all_tokens: Vec<Vec<String>> = texts.iter()
        .map(|t| tokenization::tokenize(t))
        .collect();
    
    // 批量词性标注
    let all_tags: Vec<Vec<(String, String)>> = texts.iter()
        .map(|t| pos_tagging::tag(t))
        .collect();
}

完整示例代码

use lingua_swahili_language_model::{tokenization, pos_tagging, sentiment, similarity, keywords};

fn main() {
    // 示例文本
    let sample_text = "Tanzania ni nchi nzuri sana. Watu wa Tanzania ni wakarimu na rafiki.";
    
    // 1. 分词示例
    println!("\n=== 分词示例 ===");
    let tokens = tokenization::tokenize(sample_text);
    println!("分词结果: {:?}", tokens);
    
    // 2. 词性标注示例
    println!("\n=== 词性标注示例 ===");
    let tagged = pos_tagging::tag(sample_text);
    println!("词性标注结果:");
    for (word, tag) in tagged {
        println!("{}: {}", word, tag);
    }
    
    // 3. 情感分析示例
    println!("\n=== 情感分析示例 ===");
    let sentiment_analysis = sentiment::analyze(sample_text);
    println!("情感极性: {}", sentiment_analysis.polarity);
    println!("置信度: {:.2}", sentiment_analysis.confidence);
    
    // 4. 文本相似度示例
    println!("\n=== 文本相似度示例 ===");
    let text1 = "Ninafurahi kukuona";
    let text2 = "Nimefurahi kukutana nawe";
    let similarity_score = similarity::compare(text1, text2);
    println!("文本相似度: {:.2}", similarity_score);
    
    // 5. 关键词提取示例
    println!("\n=== 关键词提取示例 ===");
    let extracted_keywords = keywords::extract(sample_text, 2);
    println!("提取的关键词: {:?}", extracted_keywords);
    
    // 6. 批量处理示例
    println!("\n=== 批量处理示例 ===");
    let multiple_texts = vec![
        "Habari za asubuhi",
        "Ninaenda sokoni",
        "Tafadhali nisaidie"
    ];
    
    let batch_tokens: Vec<Vec<String>> = multiple_texts.iter()
        .map(|t| tokenization::tokenize(t))
        .collect();
    
    println!("批量分词结果:");
    for (i, tokens) in batch_tokens.iter().enumerate() {
        println!("文本{}: {:?}", i+1, tokens);
    }
}

注意事项

  1. 该库专门针对斯瓦希里语优化,对其他语言效果不佳
  2. 处理长文本时建议分块处理
  3. 首次使用可能需要下载模型数据(如果库没有内置)

希望这个库能帮助您处理斯瓦希里语文本分析任务!

回到顶部