{"id":21655207,"url":"https://github.com/pseitz/wana_kana_rust","last_synced_at":"2025-04-06T01:09:19.912Z","repository":{"id":45347936,"uuid":"120011481","full_name":"PSeitz/wana_kana_rust","owner":"PSeitz","description":"Utility library for checking and converting between Japanese characters - Hiragana, Katakana - and Romaji ","archived":false,"fork":false,"pushed_at":"2023-06-17T14:22:57.000Z","size":334,"stargazers_count":62,"open_issues_count":7,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-25T15:21:51.627Z","etag":null,"topics":["converter","japanese","kana","katakana","romaji","romaji-translation"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PSeitz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-02T17:37:29.000Z","updated_at":"2024-06-21T15:33:59.321Z","dependencies_parsed_at":"2024-06-21T15:33:49.872Z","dependency_job_id":"2fd9e718-6723-43b4-81a0-66c533f8c627","html_url":"https://github.com/PSeitz/wana_kana_rust","commit_stats":{"total_commits":122,"total_committers":7,"mean_commits":"17.428571428571427","dds":"0.30327868852459017","last_synced_commit":"47503d45c7005daeeac6d6a9d63d01d2a40b337c"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSeitz%2Fwana_kana_rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSeitz%2Fwana_kana_rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSeitz%2Fwana_kana_rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PSeitz%2Fwana_kana_rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PSeitz","download_url":"https://codeload.github.com/PSeitz/wana_kana_rust/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247419860,"owners_count":20936012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["converter","japanese","kana","katakana","romaji","romaji-translation"],"created_at":"2024-11-25T08:30:40.262Z","updated_at":"2025-04-06T01:09:19.896Z","avatar_url":"https://github.com/PSeitz.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":" [![Crates.io](https://img.shields.io/crates/v/wana_kana.svg)](https://crates.io/crates/wana_kana)\n [![Docs](https://docs.rs/wana_kana/badge.svg)](https://docs.rs/crate/wana_kana/)\n [![Build Status](https://travis-ci.org/PSeitz/wana_kana_rust.svg?branch=master)](https://travis-ci.org/PSeitz/wana_kana_rust)\n [![Coverage Status](https://coveralls.io/repos/github/PSeitz/wana_kana_rust/badge.svg?branch=master)](https://coveralls.io/github/PSeitz/wana_kana_rust?branch=master)\n\n ## WanaKana Rust\n ### ワナカナ \u003c--\u003e WanaKana \u003c--\u003e わなかな\n```toml,ignore\n[dependencies]\nwana_kana = \"4.0\"\n```\n\n\n Utility library for checking and converting between Japanese characters - Hiragana, Katakana - and Romaji (Ported from https://github.com/WaniKani/WanaKana V4.0.2)\n ## Examples\n \n```rust\nuse wana_kana::ConvertJapanese;\n\nassert_eq!(\"ワナカナ\".to_romaji(), \"wanakana\");\nassert_eq!(\"WanaKana\".to_hiragana(), \"わなかな\");\nassert_eq!(\"WANAKANA\".to_kana(), \"ワナカナ\");\n```\n\n## Tests\n\n![100% coverage](https://raw.githubusercontent.com/PSeitz/wana_kana_rust/master/coverage_good.png)\n\n## Performance\nOn Migrating to 2.0 some performance improvements have been implemented by using more efficient lookup structures and avoiding allocations. \nAccording to these results around 1000 words can be converted per millisecond on a Core i7-6700.\n\n```\n bench_hiragana_to_romaji    3,519            1,070              -2,449  -69.59%   x 3.29\n bench_kana_1                3,066            567                -2,499  -81.51%   x 5.41\n bench_kana_2                8,006            1,831              -6,175  -77.13%   x 4.37\n bench_katakana_to_hiragana  2,512            622                -1,890  -75.24%   x 4.04\n bench_katakana_to_katakana  1,664            629                -1,035  -62.20%   x 2.65\n bench_katakana_to_romaji    6,922            1,067              -5,855  -84.59%   x 6.49\n bench_romaji_to_hiragana    3,802            1,300              -2,502  -65.81%   x 2.92\n bench_romaji_to_katakana    4,361            1,929              -2,432  -55.77%   x 2.26\n```\n\n### Comparison To [WanaKana](https://github.com/WaniKani/WanaKana)\n\nA detailed analysis has been done in the [bench_compare](bench_compare/README.md) subfolder, the analysis below may be inaccurate.\n\nA short comparison suggests around 25x performance\n\n```javascript\nimport toKana from './src/toKana';\nimport toHiragana from './src/toHiragana';\nimport toKatakana from './src/toKatakana';\nimport toRomaji from './src/toRomaji';\n\n\nconsole.time(\"yo\")\nfor (var i = 0; i \u003c 1000; i++) {\n    toKana('aiueosashisusesonaninunenokakikukeko')\n    toKana('AIUEOSASHISUSESONANINUNENOKAKIKUKEKO')\n    toHiragana('aiueosashisusesonaninunenokakikukeko')\n    toHiragana('アイウエオサシスセソナニヌネノカキクケコ')\n    toKatakana('aiueosashisusesonaninunenokakikukeko')\n    toKatakana('あいうえおさしすせそなにぬねのかきくけこ')\n    toRomaji('あいうえおさしすせそなにぬねのかきくけこ')\n    toRomaji('アイウエオサシスセソナニヌネノカキクケコ')\n}\n\nconsole.timeEnd(\"yo\")\n```\n`node -r esm run.js`\n\n```rust\nextern crate wana_kana;\nuse wana_kana::to_hiragana::to_hiragana;\nuse wana_kana::to_katakana::to_katakana;\nuse wana_kana::to_romaji::to_romaji;\nuse wana_kana::to_kana::*;\n\n\nfn main() {\n    let start = std::time::Instant::now();\n    for _ in 0..1000 {\n        to_kana(\"aiueosashisusesonaninunenokakikukeko\");\n        to_kana(\"AIUEOSASHISUSESONANINUNENOKAKIKUKEKO\");\n        to_hiragana(\"aiueosashisusesonaninunenokakikukeko\");\n        to_hiragana(\"アイウエオサシスセソナニヌネノカキクケコ\");\n        to_katakana(\"aiueosashisusesonaninunenokakikukeko\");\n        to_katakana(\"あいうえおさしすせそなにぬねのかきくけこ\");\n        to_romaji(\"あいうえおさしすせそなにぬねのかきくけこ\");\n        to_romaji(\"アイウエオサシスセソナニヌネノカキクケコ\");\n    }\n\n    println!(\"{:?}\", start.elapsed().as_millis());\n}\n\n```\n\n`node -r esm run.js`  *253.231ms*\n\n`cargo run --release --bin bench`  *9ms*\n\n\n### CLI\n#### Convert to kana and back for fun and profit\n`cargo install wana_kana` will install 2 CLI tools: `to_kana` and `to_romaji`.\n\nBoth commands support piping `ls | to_kana` and parameters `to_romaji へろ　をるど`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpseitz%2Fwana_kana_rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpseitz%2Fwana_kana_rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpseitz%2Fwana_kana_rust/lists"}