Rust土耳其语自然语言处理库lingua-turkish-language-model的使用,支持高效文本分析与语言模型构建

Lingua的土耳其语语言模型

这是用于土耳其语的语言模型,由Rust生态中最准确的自然语言检测库Lingua使用。

更新日志

版本1.2.0

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

版本1.1.0

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

安装

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

cargo add lingua-turkish-language-model

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

lingua-turkish-language-model = "1.2.0"

Rust土耳其语NLP库使用示例

以下是使用lingua-turkish-language-model进行土耳其语文本分析的完整示例:

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

fn main() {
    // 创建语言检测器,包含土耳其语模型
    let languages = vec![Language::Turkish];
    let detector: LanguageDetector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();
    
    // 土耳其语文本示例
    let turkish_text = "Merhaba, nasılsınız? Bu bir Türkçe metin örneğidir.";
    
    // 检测语言
    let detected_language = detector.detect_language_of(turkish_text);
    
    match detected_language {
        Some(language) => println!("检测到的语言: {:?}", language),
        None => println!("无法确定语言"),
    }
    
    // 获取置信度分数
    let confidence_scores = detector.compute_language_confidence_values(turkish_text);
    println!("语言置信度分数:");
    for (language, score) in confidence_scores {
        println!("{:?}: {}", language, score);
    }
}

示例说明:

  1. 首先导入必要的模块和土耳其语语言模型
  2. 创建语言检测器,专门配置为检测土耳其语
  3. 提供土耳其语文本样本
  4. 检测文本语言并输出结果
  5. 计算并显示各语言的置信度分数

完整示例Demo

以下是一个扩展的完整示例,展示更多土耳其语文本检测功能:

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

fn main() {
    // 1. 初始化检测器,包含土耳其语模型
    let languages = vec![Language::Turkish];
    let detector = LanguageDetectorBuilder::from_languages(&languages)
        .with_preloaded_language_models()
        .build();
    
    // 2. 准备测试文本
    let texts = vec![
        "Merhaba dünya!",  // 简单问候
        "İstanbul çok güzel bir şehir.",  // 描述性文本
        "Rust programlama dili çok hızlıdır.",  // 技术相关
        "Bugün hava çok sıcak.",  // 日常对话
    ];
    
    // 3. 批量检测语言
    println!("批量检测结果:");
    for text in &texts {
        let result = detector.detect_language_of(text);
        println!("文本: '{}'", text);
        println!("检测结果: {:?}", result);
        
        // 4. 获取详细置信度
        let confidence = detector.compute_language_confidence_values(text);
        println!("置信度分析:");
        for (lang, score) in confidence {
            println!("  {:?}: {:.4}", lang, score);
        }
        println!("---------------------");
    }
    
    // 5. 检测混合文本中的土耳其语片段
    let mixed_text = "Hello world! Merhaba! 你好! Bonjour!";
    let chunks = mixed_text.split('!').collect::<Vec<_>>();
    
    println!("\n混合文本分析:");
    for chunk in chunks {
        if chunk.trim().is_empty() { continue; }
        
        let result = detector.detect_language_of(chunk);
        println!("片段: '{}'", chunk.trim());
        println!("检测结果: {:?}", result);
    }
}

扩展功能说明:

  1. 初始化检测器时只加载土耳其语模型以提高效率
  2. 准备了多种类型的土耳其语文本进行测试
  3. 展示批量文本检测功能
  4. 输出详细的置信度分数,保留4位小数
  5. 演示如何处理混合语言文本中的土耳其语片段

1 回复

Rust土耳其语自然语言处理库:lingua-turkish-language-model

介绍

lingua-turkish-language-model 是一个专门为土耳其语设计的自然语言处理(NLP)库,基于Rust语言开发。该库提供了高效的文本分析功能和语言模型构建工具,特别适合处理土耳其语特有的语言特征。

主要功能

  1. 土耳其语文本分词
  2. 词性标注
  3. 命名实体识别
  4. 语言模型训练与推断
  5. 文本分类
  6. 情感分析

安装方法

在Cargo.toml中添加依赖:

[dependencies]
lingua-turkish-language-model = "0.1.0"

基本使用方法

1. 文本分词示例

use lingua_turkish_language_model::tokenization::TurkishTokenizer;

fn main() {
    let tokenizer = TurkishTokenizer::new();
    let text = "Merhaba dünya! Bu bir test cümlesidir.";
    let tokens = tokenizer.tokenize(text);
    
    println!("Tokenized text: {:?}", tokens);
    // 输出: ["Merhaba", "dünya", "!", "Bu", "bir", "test", "cümlesidir", "."]
}

2. 词性标注示例

use lingua_turkish_language_model::pos_tagging::TurkishTagger;

fn main() {
    let tagger = TurkishTagger::new();
    let text = "Kedi masanın üzerinde uyuyor.";
    let tagged = tagger.tag(text);
    
    for (token, tag) in tagged {
        println!("{} -> {}", token, tag);
    }
    // 示例输出:
    // Kedi -> NOUN
    // masanın -> NOUN
    // üzerinde -> ADP
    // uyuyor -> VERB
    // . -> PUNCT
}

3. 命名实体识别示例

use lingua_turkish_language_model::ner::TurkishNer;

fn main() {
    let ner = TurkishNer::new();
    let text = "Recep Tayyip Erdoğan Ankara'da bir konuşma yaptı.";
    let entities = ner.recognize(text);
    
    println!("Named entities:");
    for entity in entities {
        println!("{:?} -> {}", entity.text, entity.label);
    }
    // 示例输出:
    // "Recep Tayyip Erdoğan" -> PERSON
    // "Ankara" -> LOCATION
}

4. 语言模型使用示例

use lingua_turkish_language_model::language_model::TurkishLanguageModel;

fn main() {
    let model = TurkishLanguageModel::load_default();
    let sentence = "Yarın hava nasıl";
    let next_words = model.predict_next_words(sentence, 3);
    
    println!("Next word predictions:");
    for (word, prob) in next_words {
        println!("{}: {:.2}%", word, prob * 100.0);
    }
}

高级功能

训练自定义语言模型

use lingua_turkish_language_model::language_model::TurkishLanguageModelBuilder;

fn main() {
    let corpus = vec![
        "Bu bir örnek cümledir.".to_string(),
        "Rust programlama dili çok hızlıdır.".to_string(),
        // 更多土耳其语句子...
    ];
    
    let model = TurkishLanguageModelBuilder::new()
        .with_corpus(corpus)
        .with_ngram_size(3)
        .build();
    
    model.save("my_model.bin").unwrap();
}

文本分类示例

use lingua_turkish_language_model::classification::TurkishTextClassifier;

fn main() {
    let mut classifier = TurkishTextClassifier::new();
    
    // 训练分类器
    classifier.train("spor", "Fenerbahçe galibiyet serisini sürdürdü");
    classifier.train("ekonomi", "Dolar 7.50 seviyesinde işlem görüyor");
    // 更多训练数据...
    
    let text = "Borsa İstanbul'da işlemler hız kazandı";
    let category = classifier.classify(text);
    
    println!("Text category: {}", category); // 输出: "ekonomi"
}

完整示例代码

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

use lingua_turkish_language_model::{
    tokenization::TurkishTokenizer,
    pos_tagging::TurkishTagger,
    ner::TurkishNer,
    classification::TurkishTextClassifier
};

fn main() {
    // 示例文本
    let text = "İstanbul Büyükşehir Belediye Başkanı Ekrem İmamoğlu bugün bir basın toplantısı düzenledi.";

    // 1. 分词
    println!("=== 分词示例 ===");
    let tokenizer = TurkishTokenizer::new();
    let tokens = tokenizer.tokenize(text);
    println!("Tokenized: {:?}\n", tokens);

    // 2. 词性标注
    println!("=== 词性标注示例 ===");
    let tagger = TurkishTagger::new();
    let tagged = tagger.tag(text);
    for (token, tag) in tagged {
        println!("{} -> {}", token, tag);
    }
    println!();

    // 3. 命名实体识别
    println!("=== 命名实体识别示例 ===");
    let ner = TurkishNer::new();
    let entities = ner.recognize(text);
    for entity in entities {
        println!("{} -> {}", entity.text, entity.label);
    }
    println!();

    // 4. 文本分类
    println!("=== 文本分类示例 ===");
    let mut classifier = TurkishTextClassifier::new();
    // 训练分类器
    classifier.train("siyaset", "Cumhurbaşkanı yeni bir açıklama yaptı");
    classifier.train("ekonomi", "Borsa bugün yükselişle kapandı");
    classifier.train("spor", "Fenerbahçe son maçını kazandı");
    
    let category = classifier.classify(text);
    println!("分类结果: {}\n", category);
}

性能优化

该库针对土耳其语特性进行了优化:

  • 处理土耳其语特有的字符(如 ç, ğ, ı, ö, ş, ü)
  • 支持土耳其语特有的元音和谐规则
  • 针对土耳其语词缀结构优化了处理算法

注意事项

  1. 确保文本使用UTF-8编码
  2. 土耳其语有大小写敏感的特殊字母(如 İ/i, I/ı)
  3. 对于专业领域应用,建议使用领域特定的语料库训练模型

这个库为土耳其语NLP任务提供了强大的工具集,结合Rust的性能优势,能够高效处理各种土耳其语文本分析任务。

回到顶部