#日语 #片假名 #平假名 #罗马字 #假名

bin+lib wana_kana

用于检查和转换日本文字(汉字、平假名、片假名)与罗马字之间的工具库

10 个版本 (6 个稳定版)

3.0.0 2023年1月19日
2.1.2 2023年1月16日
2.1.0 2021年12月19日
2.0.1 2019年11月19日
0.9.2 2018年2月8日

文本处理 分类中排名第 159

Download history 642/week @ 2024-03-24 755/week @ 2024-03-31 723/week @ 2024-04-07 648/week @ 2024-04-14 737/week @ 2024-04-21 615/week @ 2024-04-28 775/week @ 2024-05-05 920/week @ 2024-05-12 710/week @ 2024-05-19 557/week @ 2024-05-26 742/week @ 2024-06-02 673/week @ 2024-06-09 782/week @ 2024-06-16 1113/week @ 2024-06-23 611/week @ 2024-06-30 622/week @ 2024-07-07

每月下载量 3,192
5 个crate中使用(4个直接使用)

MIT 协议

415KB
9K SLoC

Crates.io Docs Build Status Coverage Status

WanaKana Rust

ワナカナ <--> WanaKana <--> わなかな

[dependencies]
wana_kana = "2.0"

用于检查和转换日本文字(平假名、片假名)与罗马字之间的工具库(从 https://github.com/WaniKani/WanaKana V4.0.2 版本移植过来)

示例

use wana_kana::to_romaji::*;
use wana_kana::to_kana::*;
use wana_kana::to_hiragana::*;
use wana_kana::Options;
assert_eq!(to_romaji("ワナカナ"), "wanakana");
assert_eq!(to_hiragana("WanaKana"), "わなかな");
assert_eq!(to_kana("WANAKANA"), "ワナカナ");

测试

100% coverage

性能

在迁移到 2.0 版本后,通过使用更高效的查找结构和避免分配,实现了性能改进。根据这些结果,在 Core i7-6700 上每毫秒可以转换大约 1000 个单词。

 bench_hiragana_to_romaji    3,519            1,070              -2,449  -69.59%   x 3.29
 bench_kana_1                3,066            567                -2,499  -81.51%   x 5.41
 bench_kana_2                8,006            1,831              -6,175  -77.13%   x 4.37
 bench_katakana_to_hiragana  2,512            622                -1,890  -75.24%   x 4.04
 bench_katakana_to_katakana  1,664            629                -1,035  -62.20%   x 2.65
 bench_katakana_to_romaji    6,922            1,067              -5,855  -84.59%   x 6.49
 bench_romaji_to_hiragana    3,802            1,300              -2,502  -65.81%   x 2.92
 bench_romaji_to_katakana    4,361            1,929              -2,432  -55.77%   x 2.26

WanaKana 的比较

bench_compare 子目录中进行了详细分析,以下分析可能不准确。

简短的比较表明性能提高了大约 25 倍

import toKana from './src/toKana';
import toHiragana from './src/toHiragana';
import toKatakana from './src/toKatakana';
import toRomaji from './src/toRomaji';


console.time("yo")
for (var i = 0; i < 1000; i++) {
    toKana('aiueosashisusesonaninunenokakikukeko')
    toKana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')
    toHiragana('aiueosashisusesonaninunenokakikukeko')
    toHiragana('アイウエオサシスセソナニヌネノカキクケコ')
    toKatakana('aiueosashisusesonaninunenokakikukeko')
    toKatakana('あいうえおさしすせそなにぬねのかきくけこ')
    toRomaji('あいうえおさしすせそなにぬねのかきくけこ')
    toRomaji('アイウエオサシスセソナニヌネノカキクケコ')
}

console.timeEnd("yo")

node-r esm run.js

extern crate wana_kana;
use wana_kana::to_hiragana::to_hiragana;
use wana_kana::to_katakana::to_katakana;
use wana_kana::to_romaji::to_romaji;
use wana_kana::to_kana::*;


fn main() {
    let start = std::time::Instant::now();
    for _ in 0..1000 {
        to_kana("aiueosashisusesonaninunenokakikukeko");
        to_kana("AIUEOSASHISUSESONANINUNENOKAKIKUKEKO");
        to_hiragana("aiueosashisusesonaninunenokakikukeko");
        to_hiragana("アイウエオサシスセソナニヌネノカキクケコ");
        to_katakana("aiueosashisusesonaninunenokakikukeko");
        to_katakana("あいうえおさしすせそなにぬねのかきくけこ");
        to_romaji("あいうえおさしすせそなにぬねのかきくけこ");
        to_romaji("アイウエオサシスセソナニヌネノカキクケコ");
    }

    println!("{:?}", start.elapsed().as_millis());
}

node -r esm run.js 253.231ms

cargo run --release --bin bench 9ms

命令行界面

用于娱乐和盈利将假名和罗马字相互转换

cargo install wana_kana 将安装 2 个命令行工具: to_kanato_romaji

两个命令都支持管道 ls | to_kana 和参数 to_romaji へろ をるど

依赖

~19–630KB
~10K SLoC