Rust葡萄牙语自然语言处理库lingua-portuguese-language-model的使用,支持高效文本分析与语言模型处理

Rust葡萄牙语自然语言处理库lingua-portuguese-language-model的使用,支持高效文本分析与语言模型处理

Portuguese language model for Lingua

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

变更日志

版本1.2.0

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

版本1.1.0

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

安装

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

cargo add lingua-portuguese-language-model

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

lingua-portuguese-language-model = "1.2.0"

完整使用示例

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

fn main() {
    // 创建语言检测器,包含葡萄牙语和其他可选语言
    let languages = vec![Language::Portuguese, Language::English, Language::Spanish];
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();
    
    // 要检测的葡萄牙语文本
    let text = "Olá, como você está? Esta é uma frase em português.";
    
    // 检测语言
    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);
    }
}

技术细节

  • 文件大小: 1.19 MiB
  • 许可证: Apache-2.0
  • 分类: 文本处理(Text processing)

扩展完整示例

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

fn main() {
    // 初始化语言检测器,支持多种语言
    let languages = vec![
        Language::Portuguese,
        Language::English,
        Language::Spanish,
        Language::French,
        Language::German
    ];
    
    let detector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();

    // 测试多个文本样本
    let samples = vec![
        ("葡萄牙语", "O Brasil é um país lindo e diversificado."),
        ("英语", "The quick brown fox jumps over the lazy dog"),
        ("西班牙语", "El niño juega en el parque"),
        ("混合文本", "Olá, hello, bonjour"),
    ];

    for (desc, text) in samples {
        println!("\n分析文本: {}", desc);
        println!("文本内容: {}", text);
        
        // 检测主要语言
        if let Some(lang) = detector.detect_language_of(text) {
            println!("主要语言: {:?}", lang);
        } else {
            println!("无法确定主要语言");
        }
        
        // 获取所有语言的置信度
        let confidences = detector.compute_language_confidence_values(text);
        println!("详细置信度:");
        for (lang, conf) in confidences {
            println!("  {:?}: {:.2}%", lang, conf * 100.0);
        }
    }
    
    // 批量检测示例
    let batch_texts = vec![
        "Bom dia, como vai você?",
        "Good morning, how are you?",
        "Buenos días, ¿cómo estás?"
    ];
    
    println!("\n批量检测结果:");
    for result in detector.detect_languages_in(batch_texts) {
        match result {
            Some(lang) => println!("检测到语言: {:?}", lang),
            None => println!("无法确定语言"),
        }
    }
}

1 回复

Rust葡萄牙语自然语言处理库lingua-portuguese-language-model使用指南

简介

lingua-portuguese-language-model是一个专门为葡萄牙语设计的Rust自然语言处理库,提供了高效的文本分析和语言模型处理功能。该库特别适合处理葡萄牙语文本,包括巴西葡萄牙语和欧洲葡萄牙语变体。

主要功能

  • 葡萄牙语分词与词性标注
  • 命名实体识别
  • 文本情感分析
  • 语言模型推断
  • 文本分类
  • 词向量处理

安装方法

在Cargo.toml中添加依赖:

[dependencies]
lingua-portuguese-language-model = "0.3.0"

基本使用方法

1. 文本分词

use lingua_portuguese_language_model::tokenization::Tokenizer;

fn main() {
    let tokenizer = Tokenizer::new();
    let text = "O Rust é uma linguagem de programação incrível!";
    let tokens = tokenizer.tokenize(text);
    
    println!("Tokens: {:?}", tokens);
    // 输出: ["O", "Rust", "é", "uma", "linguagem", "de", "programação", "incrível", "!"]
}

2. 词性标注

use lingua_portuguese_language_model::pos_tagging::PosTagger;

fn main() {
    let tagger = PosTagger::new();
    let text = "O gato preto pulou o muro alto.";
    let tagged = tagger.tag(text);
    
    for (token, tag) in tagged {
        println!("{}: {}", token, tag);
    }
    // 输出示例:
    // O: ART
    // gato: N
    // preto: ADJ
    // pulou: V
    // o: ART
    // muro: N
    // alto: ADJ
    // .: PUNCT
}

3. 命名实体识别

use lingua_portuguese_language_model::ner::NamedEntityRecognizer;

fn main() {
    let ner = NamedEntityRecognizer::new();
    let text = "João Silva mora em São Paulo e trabalha na Microsoft.";
    let entities = ner.recognize(text);
    
    for entity in entities {
        println!("{:?}", entity);
    }
    // 输出示例:
    // Entity { text: "João Silva", tag: "PER" }
    // Entity { text: "São Paulo", tag: "LOC" }
    // Entity { text: "Microsoft", tag: "ORG" }
}

4. 情感分析

use lingua_portuguese_language_model::sentiment::SentimentAnalyzer;

fn main() {
    let analyzer = SentimentAnalyzer::new();
    let text = "Esse filme foi absolutamente incrível! A atuação foi fenomenal.";
    let sentiment = analyzer.analyze(text);
    
    println!("Sentimento: {:?}", sentiment);
    // 输出示例:
    // Sentiment { score: 0.85, label: "POSITIVE" }
}

5. 使用语言模型生成文本

use lingua_portuguese_language_model::language_model::PortugueseLanguageModel;

fn main() {
    let model = PortugueseLanguageModel::load_default().unwrap();
    let prompt = "O futuro da inteligência artificial";
    let generated = model.generate_text(prompt, 50);
    
    println!("Texto gerado: {}", generated);
}

高级功能

自定义模型加载

use lingua_portuguese_language_model::language_model::PortugueseLanguageModel;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从自定义路径加载模型
    let model = PortugueseLanguageModel::load_from_file("path/to/model.bin")?;
    
    // 使用模型...
    Ok(())
}

批处理文本分析

use lingua_portuguese_language_model::pipeline::TextProcessingPipeline;

fn main() {
    let pipeline = TextProcessingPipeline::new();
    let texts = vec![
        "Texto exemplo 1.",
        "Outro texto para análise.",
        "Mais um exemplo em português."
    ];
    
    let results = pipeline.process_batch(&texts);
    
    for result in results {
        println!("Tokens: {:?}", result.tokens);
        println!("Tags: {:?}", result.pos_tags);
        println!("Entities: {:?}", result.entities);
        println!("---");
    }
}

性能优化提示

  1. 对于大量文本处理,使用批处理方法
  2. 考虑将模型加载为全局静态变量(使用lazy_static或once_cell)
  3. 对于长时间运行的服务,可以复用模型实例

注意事项

  • 首次使用某些功能时会自动下载预训练模型(可配置本地缓存路径)
  • 处理非常长的文本时考虑分块处理
  • 欧洲葡萄牙语和巴西葡萄牙语有自动检测功能,也可以手动指定

这个库为Rust开发者提供了强大的葡萄牙语NLP功能,可以轻松集成到各种应用程序中,从简单的文本分析到复杂的语言理解任务。

完整示例演示

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

use lingua_portuguese_language_model::{
    tokenization::Tokenizer,
    pos_tagging::PosTagger,
    ner::NamedEntityRecognizer,
    sentiment::SentimentAnalyzer,
    language_model::PortugueseLanguageModel
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化所有处理器
    let tokenizer = Tokenizer::new();
    let tagger = PosTagger::new();
    let ner = NamedEntityRecognizer::new();
    let sentiment_analyzer = SentimentAnalyzer::new();
    let language_model = PortugueseLanguageModel::load_default()?;
    
    // 示例文本
    let text = "A empresa Google, sediada em Mountain View, anunciou hoje um novo assistente virtual baseado em inteligência artificial. Os usuários estão muito entusiasmados com esta inovação!";
    
    // 1. 分词
    println!("=== 分词结果 ===");
    let tokens = tokenizer.tokenize(text);
    println!("{:?}\n", tokens);
    
    // 2. 词性标注
    println!("=== 词性标注 ===");
    let tagged = tagger.tag(text);
    for (token, tag) in tagged {
        println!("{}: {}", token, tag);
    }
    println!();
    
    // 3. 命名实体识别
    println!("=== 命名实体 ===");
    let entities = ner.recognize(text);
    for entity in entities {
        println!("{:?}", entity);
    }
    println!();
    
    // 4. 情感分析
    println!("=== 情感分析 ===");
    let sentiment = sentiment_analyzer.analyze(text);
    println!("{:?}\n", sentiment);
    
    // 5. 文本生成
    println!("=== 文本生成 ===");
    let generated = language_model.generate_text("O impacto da IA no mercado de trabalho", 30);
    println!("{}\n", generated);
    
    Ok(())
}

这个完整示例展示了如何同时使用该库的多个功能模块处理葡萄牙语文本。您可以根据实际需求选择使用其中的部分或全部功能。

回到顶部