Rust文本处理库varcon-core的使用:高效字符串转换与Unicode规范化工具

Rust文本处理库varcon-core的使用:高效字符串转换与Unicode规范化工具

varcon-core是一个专注于高效字符串转换和Unicode规范化处理的Rust库。作为typos项目的一部分,它主要用于源代码拼写检查。

主要特性

  • 运行速度快,适合在monorepo中运行
  • 误报率低,可在PR中安全使用
  • 支持多种安装方式

安装方式

使用Cargo安装

cargo install typos-cli

使用Homebrew安装

brew install typos-cli

使用Conda安装

conda install typos

使用Pacman安装

sudo pacman -S typos

基本使用

查看拼写错误:

typos

修复拼写错误:

typos --write-changes
# 或简写
typos -w

配置示例

以下是处理特殊情况的配置示例:

[default]
extend-ignore-identifiers-re = [
    # 不需要修复的错误
    "AttributeID.*Supress.*",
]

[default.extend-identifiers]
# 不需要修复的错误
AttributeIDSupressMenu = "AttributeIDSupressMenu"

[default.extend-words]
# 保留姓氏"Teh"不纠正
teh = "teh"

禁用本地化文件内容检查:

[type.po]
extend-glob = ["*.po"]
check-file = false

排除特定文件:

[files]
extend-exclude = ["localized/*.po"]

完整示例代码

以下是内容中提供的示例代码:

use varcon_core::Converter;

fn main() {
    // 创建一个转换器实例
    let converter = Converter::default();
    
    // 示例文本
    let input = "This is an example text with some misspellings.";
    
    // 检查拼写
    let result = converter.check(input);
    
    // 打印检查结果
    println!("Original: {}", input);
    println!("Suggestions:");
    
    for suggestion in result.suggestions {
        println!("  {} => {}", suggestion.original, suggestion.correction);
    }
    
    // 自动修正文本
    let corrected = converter.correct(input);
    println!("Corrected: {}", corrected);
}

扩展示例代码

以下是基于内容扩展的完整示例:

use varcon_core::{Converter, Suggestion};

fn main() {
    // 初始化转换器
    let converter = Converter::builder()
        .add_word("Rust", "Rust")  // 添加自定义词汇
        .add_word("varcon", "varcon")
        .build();
    
    // 测试文本
    let texts = vec![
        "This is a Rust project using varcon-core.",
        "It handels Unicode normalization and string conversion.",
        "Teh library is very fast."
    ];
    
    // 批量处理文本
    for text in texts {
        println!("\nProcessing: {}", text);
        
        // 检查拼写
        let result = converter.check(text);
        
        if result.suggestions.is_empty() {
            println!("No spelling issues found");
        } else {
            println!("Suggestions:");
            for suggestion in result.suggestions {
                println!("  - '{}' could be '{}' (confidence: {})", 
                    suggestion.original,
                    suggestion.correction,
                    suggestion.confidence);
            }
            
            // 自动修正
            let corrected = converter.correct(text);
            println!("Corrected version: {}", corrected);
        }
    }
    
    // 处理自定义词汇
    let custom_text = "The AttributeIDSupressMenu is not fixed by default.";
    println!("\nCustom case: {}", custom_text);
    let result = converter.check(custom_text);
    println!("Found {} suggestions", result.suggestions.len());
}

调试技巧

查看有效配置:

typos --dump-config -

检查处理过程:

typos --files
typos --identifiers
typos --words

启用详细日志:

typos -v

许可证信息

varcon-core使用双重许可协议:

  • MIT许可证
  • Apache 2.0许可证

1 回复

Rust文本处理库varcon-core的使用:高效字符串转换与Unicode规范化工具

介绍

varcon-core是一个专注于字符串转换和Unicode规范化的Rust库,它提供了高效的文本处理能力,特别适合需要处理多种文字变体、大小写转换和Unicode规范化操作的场景。

该库的主要特点包括:

  • 支持多种语言的字符串转换
  • 实现Unicode规范化形式(NFD, NFC, NFKD, NFKC)
  • 高效处理大规模文本
  • 零拷贝设计,减少内存分配

安装

在Cargo.toml中添加依赖:

[dependencies]
varcon-core = "0.8"

基本使用方法

1. Unicode规范化

use varcon_core::normalizer::Normalizer;

fn main() {
    let text = "Café";
    
    // NFC规范化
    let nfc = Normalizer::nfc().normalize(text);
    println!("NFC: {}", nfc);
    
    // NFD规范化
    let nfd = Normalizer::nfd().normalize(text);
    println!("NFD: {}", nfd);
}

2. 大小写转换

use varcon_core::case::CaseMap;

fn main() {
    let case_map = CaseMap::new();
    let text = "İstanbul";
    
    // 转换为小写
    let lower = case_map.lowercase(text);
    println!("Lowercase: {}", lower);
    
    // 转换为大写
    let upper = case_map.uppercase(text);
    println!("Uppercase: {}", upper);
    
    // 转换为标题大小写
    let title = case_map.titlecase(text);
    println!("Titlecase: {}", title);
}

3. 文字变体转换

use varcon_core::converter::Converter;
use varcon_core::category::Category;

fn main() {
    let converter = Converter::new();
    let text = "color";
    
    // 英式英语拼写转换
    let british = converter.convert(text, Category::British);
    println!("British: {}", british);
}

高级用法

自定义转换规则

use varcon_core::converter::ConverterBuilder;
use varcon_core::category::Category;

fn main() {
    let converter = ConverterBuilder::new()
        .with_custom_rule("([Tt])yre", "$1ire") // 添加自定义正则替换规则
        .build();
    
    let text = "tyre";
    let converted = converter.convert(text, Category::American);
    println!("Converted: {}", converted); // 输出: "tire"
}

批量处理文本

use varcon_core::normalizer::Normalizer;

fn main() {
    let normalizer = Normalizer::nfc();
    let texts = vec!["Café", "naïve", "façade"];
    
    let normalized: Vec<String> = texts.iter()
        .map(|&t| normalizer.normalize(t))
        .collect();
    
    println!("{:?}", normalized);
}

性能优化

对于需要处理大量文本的场景,可以使用varcon-core提供的零拷贝API:

use varcon_core::normalizer::Normalizer;
use varcon_core::borrowed::BorrowedNormalized;

fn process_large_text(text: &str) -> BorrowedNormalized {
    let normalizer = Normalizer::nfc();
    normalizer.normalize_borrowed(text)
}

fn main() {
    let large_text = "这是一个需要规范化的大文本...";
    let result = process_large_text(large_text);
    println!("{}", result.as_str());
}

完整示例

下面是一个综合使用varcon-core各种功能的完整示例:

use varcon_core::{normalizer::Normalizer, case::CaseMap, converter::{Converter, ConverterBuilder}, category::Category};

fn main() {
    // Unicode规范化示例
    let text = "Café";
    println!("原始文本: {}", text);
    
    let nfc = Normalizer::nfc().normalize(text);
    println!("NFC规范化: {}", nfc);
    
    let nfd = Normalizer::nfd().normalize(text);
    println!("NFD规范化: {}", nfd);
    
    // 大小写转换示例
    let case_map = CaseMap::new();
    let city = "İstanbul";
    
    println!("\n城市名称: {}", city);
    println!("小写: {}", case_map.lowercase(city));
    println!("大写: {}", case_map.uppercase(city));
    println!("标题大小写: {}", case_map.titlecase(city));
    
    // 文字变体转换示例
    let converter = Converter::new();
    let word = "color";
    
    println!("\n美式拼写: {}", word);
    println!("英式拼写: {}", converter.convert(word, Category::British));
    
    // 自定义规则转换
    let custom_converter = ConverterBuilder::new()
        .with_custom_rule("([Cc])entre", "$1enter") // 添加自定义规则
        .build();
    
    let uk_word = "centre";
    println!("\n英式拼写: {}", uk_word);
    println!("自定义转换后: {}", custom_converter.convert(uk_word, Category::American));
    
    // 批量处理示例
    let words = vec!["naïve", "façade", "rôle"];
    println!("\n批量规范化处理:");
    for word in words {
        println!("{} → {}", word, Normalizer::nfc().normalize(word));
    }
    
    // 零拷贝API使用
    let long_text = "这是一个需要规范化处理的长文本示例...";
    println!("\n零拷贝处理结果:");
    let normalized = Normalizer::nfc().normalize_borrowed(long_text);
    println!("{}", normalized.as_str());
}

注意事项

  1. varcon-core对Unicode标准的支持非常全面,但某些边缘情况可能需要特殊处理
  2. 对于非常大的文本,考虑分块处理以避免内存问题
  3. 转换结果可能会因Unicode版本不同而有所变化

varcon-core是处理国际化文本的强大工具,特别适合需要支持多语言或处理复杂文本转换的Rust应用程序。

回到顶部