Rust字符串复数化库pluralizer的使用,高效处理英文单词单复数转换与格式化

Rust字符串复数化库pluralizer的使用,高效处理英文单词单复数转换与格式化

pluralizer是一个Rust包,用于根据计数将任何单词复数化或单数化,灵感来自NPM的pluralize包。它会保持复数形式(当给定计数不为1时),或者保持单数形式(当给定计数为1时)。

性能

该库已使用Criterion进行基准测试。以下是最近测试环境中观察到的示例结果:

基准测试 平均时间 说明
pluralize ~7.6 ms 执行重复复数化操作
添加规则 + pluralize ~7.8 ms 添加和应用自定义规则

时间可能会因CPU、Rust编译器版本和基准配置等因素而异。

开始使用

在Cargo.toml中添加以下依赖:

[dependencies]
pluralizer = "0.4.0"

示例

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

use pluralizer::pluralize;

fn main() {
    // 可以将单词转换为复数形式
    println!("{}", pluralize("House", 2, true)); // 2 Houses

    // 也可以将单词转换为单数形式
    println!("{}", pluralize("Houses", 1, true)); // 1 House

    // 如果需要可以保持单数形式
    println!("{}", pluralize("House", 1, false)); // House

    // 或者保持复数形式
    println!("{}", pluralize("Houses", 2, false)); // Houses
}

完整示例

基于上述内容,这里提供一个更完整的示例demo:

use pluralizer::pluralize;

fn main() {
    // 基本用法示例
    println!("{}", pluralize("apple", 1, true));   // 1 apple
    println!("{}", pluralize("apple", 3, true));   // 3 apples
    println!("{}", pluralize("child", 1, true));   // 1 child
    println!("{}", pluralize("child", 5, true));   // 5 children
    
    // 不显示计数
    println!("{}", pluralize("mouse", 1, false));  // mouse
    println!("{}", pluralize("mouse", 4, false));  // mice
    
    // 不规则名词处理
    println!("{}", pluralize("person", 2, true));  // 2 people
    println!("{}", pluralize("foot", 3, true));    // 3 feet
    
    // 特殊复数形式
    println!("{}", pluralize("cactus", 2, true));  // 2 cacti
    println!("{}", pluralize("index", 2, true));   // 2 indices
    
    // 保持单复数形式
    println!("{}", pluralize("sheep", 1, false));  // sheep
    println!("{}", pluralize("sheep", 2, false));  // sheep
}

许可证

该库采用以下任一许可证:

  • Apache License, Version 2.0
  • MIT license

贡献

除非您明确声明,否则任何有意提交用于包含在作品中的贡献,如Apache-2.0许可证中所定义,均应按照上述双重许可,不附加任何额外条款或条件。


1 回复

Rust字符串复数化库pluralizer的使用指南

pluralizer是一个用于高效处理英文单词单复数转换与格式化的Rust库。它可以帮助开发者轻松地将英文单词在单数和复数形式之间转换,并支持自定义复数形式。

安装

在Cargo.toml中添加依赖:

[dependencies]
pluralizer = "0.1"

基本用法

1. 简单复数化

use pluralizer::pluralize;

fn main() {
    // 单数形式
    println!("{}", pluralize("apple", 1, false)); // 输出: "apple"
    
    // 复数形式
    println!("{}", pluralize("apple", 2, false)); // 输出: "apples"
}

2. 包含数量的复数化

use pluralizer::pluralize;

fn main() {
    // 单数带数量
    println!("{}", pluralize("apple", 1, true)); // 输出: "1 apple"
    
    // 复数带数量
    println!("{}", pluralize("apple", 5, true)); // 输出: "5 apples"
}

高级用法

1. 处理不规则复数形式

use pluralizer::{pluralize, add_irregular};

fn main() {
    // 添加不规则复数形式
    add_irregular("person", "people");
    
    // 使用不规则复数形式
    println!("{}", pluralize("person", 1, false)); // 输出: "person"
    println!("{}", pluralize("person", 2, false)); // 输出: "people"
}

2. 处理以特定字母结尾的单词

use pluralizer::{pluralize, add_plural_rule};

fn main() {
    // 添加自定义复数规则:以"us"结尾的单词复数形式为"i"
    add_plural_rule("us$", "i");
    
    // 应用自定义规则
    println!("{}", pluralize("cactus", 1, false)); // 输出: "cactus"
    println!("{}", pluralize("cactus", 2, false)); // 输出: "cacti"
}

3. 批量处理多个单词

use pluralizer::pluralize_many;

fn main() {
    let words = vec!["apple", "banana", "cherry"];
    let counts = vec![1, 2, 3];
    
    // 批量处理复数化
    let result = pluralize_many(&words, &counts, false);
    println!("{:?}", result); // 输出: ["apple", "bananas", "cherries"]
}

完整示例代码

use pluralizer::{pluralize, pluralize_many, add_irregular, add_plural_rule, add_uncountable};

fn main() {
    // 基本用法示例
    println!("=== 基本用法 ===");
    println!("{}", pluralize("book", 1, false)); // book
    println!("{}", pluralize("book", 3, false)); // books
    println!("{}", pluralize("book", 1, true)); // 1 book
    println!("{}", pluralize("book", 3, true)); // 3 books

    // 不规则复数示例
    println!("\n=== 不规则复数 ===");
    add_irregular("child", "children");
    println!("{}", pluralize("child", 1, false)); // child
    println!("{}", pluralize("child", 2, false)); // children

    // 自定义规则示例
    println!("\n=== 自定义规则 ===");
    add_plural_rule("(ox)$", "$1en");
    println!("{}", pluralize("ox", 1, false)); // ox
    println!("{}", pluralize("ox", 2, false)); // oxen

    // 不可数名词示例
    println!("\n=== 不可数名词 ===");
    add_uncountable("sheep");
    println!("{}", pluralize("sheep", 1, false)); // sheep
    println!("{}", pluralize("sheep", 2, false)); // sheep

    // 批量处理示例
    println!("\n=== 批量处理 ===");
    let items = vec!["box", "mouse", "goose"];
    let quantities = vec![1, 2, 3];
    let pluralized = pluralize_many(&items, &quantities, true);
    println!("{:?}", pluralized); 
    // 输出: ["1 box", "2 mice", "3 geese"]
}

性能考虑

pluralizer库在内部使用了高效的字符串处理和缓存机制,适合在高性能场景下使用。对于大量重复的单词转换,它会缓存结果以提高性能。

自定义规则

你可以完全自定义复数化规则:

use pluralizer::{add_plural_rule, add_singular_rule, add_uncountable};

fn main() {
    // 添加不可数名词
    add_uncountable("news");
    
    // 添加复数规则
    add_plural_rule("(alias)$", "$1es");
    
    // 添加单数规则
    add_singular_rule("(vir)uses$", "$1us");
    
    println!("{}", pluralize("alias", 2, false)); // aliases
    println!("{}", pluralize("news", 2, false)); // news
    println!("{}", pluralize("virus", 2, false)); // viruses
}

注意事项

  1. 默认规则已经包含了大多数常见的英文单词复数形式
  2. 对于专业术语或不常见的单词,可能需要添加自定义规则
  3. 该库主要针对英文单词,对其他语言支持有限

pluralizer库为Rust开发者提供了一个简单而强大的工具来处理英文单词的单复数转换问题,特别适合国际化应用、内容管理系统或需要自然语言生成的场景。

回到顶部