All Projects → hexenq → Kuroshiro

hexenq / Kuroshiro

Licence: mit
Japanese language library for converting Japanese sentence to Hiragana, Katakana or Romaji with furigana and okurigana modes supported.

Programming Languages

javascript
184084 projects - #8 most used programming language

Labels

Projects that are alternatives of or similar to Kuroshiro

Japanese-Words
整理日语N2单词(新标准日本语初级和中级)
Stars: ✭ 41 (-89.38%)
Mutual labels:  japanese
unofficial-jisho-api
Encapsulates the official Jisho.org API and also provides kanji, example, and stroke diagram search.
Stars: ✭ 88 (-77.2%)
Mutual labels:  japanese
Jumanpp
Juman++ (a Morphological Analyzer Toolkit)
Stars: ✭ 254 (-34.2%)
Mutual labels:  japanese
Haxe-Macro-Book
Haxeのマクロ本
Stars: ✭ 20 (-94.82%)
Mutual labels:  japanese
unidic-py
Unidic packaged for installation via pip.
Stars: ✭ 17 (-95.6%)
Mutual labels:  japanese
knp
A Japanese Parser
Stars: ✭ 16 (-95.85%)
Mutual labels:  japanese
gazou
Japanese OCR for Linux & Windows
Stars: ✭ 32 (-91.71%)
Mutual labels:  japanese
Yakuhanjp
Yakumono-Hankaku Only Web Fonts
Stars: ✭ 288 (-25.39%)
Mutual labels:  japanese
sembei
🍘 単語分割を経由しない単語埋め込み 🍘
Stars: ✭ 14 (-96.37%)
Mutual labels:  japanese
TALPCo
TUFS Asian Language Parallel Corpus
Stars: ✭ 32 (-91.71%)
Mutual labels:  japanese
sample-ui-react
Material-UI+ React.js + Redux [ Pug / Scss / Babel ]
Stars: ✭ 15 (-96.11%)
Mutual labels:  japanese
japanese-pitch-accent-resources
Trying to consolidate japanese phonetic, and in particular pitch accent resources into one list
Stars: ✭ 64 (-83.42%)
Mutual labels:  japanese
scoop-for-jp
Scoop bucket for ALL Japanese users.
Stars: ✭ 17 (-95.6%)
Mutual labels:  japanese
activitypub
私家版ActivityPub日本語訳
Stars: ✭ 23 (-94.04%)
Mutual labels:  japanese
Nagisa
A Japanese tokenizer based on recurrent neural networks
Stars: ✭ 260 (-32.64%)
Mutual labels:  japanese
wana kana rust
Utility library for checking and converting between Japanese characters - Hiragana, Katakana - and Romaji
Stars: ✭ 46 (-88.08%)
Mutual labels:  japanese
Zipangu
A library for compatibility about Japan.
Stars: ✭ 27 (-93.01%)
Mutual labels:  japanese
The Rust Programming Language Ja
Rust文書の【旧】和訳レポジトリ → 最新版はこちら: https://github.com/rust-lang-ja/book-ja
Stars: ✭ 352 (-8.81%)
Mutual labels:  japanese
Site
cpprefjpサイトのMarkdownソース
Stars: ✭ 275 (-28.76%)
Mutual labels:  japanese
textlint-rule-ja-no-abusage
よくある日本語の誤用をチェックするtextlintルール
Stars: ✭ 21 (-94.56%)
Mutual labels:  japanese

kuroshiro

kuroshiro

Build Status Coverage Status npm version Join the chat at https://gitter.im/hexenq/kuroshiro License

kuroshiro is a Japanese language library for converting Japanese sentence to Hiragana, Katakana or Romaji with furigana and okurigana modes supported.

Read this in other languages: English, 日本語, 简体中文, 繁體中文.

Demo

You can check the demo here.

Feature

  • Japanese Sentence => Hiragana, Katakana or Romaji
  • Furigana and okurigana supported
  • 🆕Multiple morphological analyzers supported
  • 🆕Multiple romanization systems supported
  • Useful Japanese utils

Breaking Change in 1.x

  • Seperate morphological analyzer from phonetic notation logic to make it possible that we can use different morphological analyzers (ready-made or customized)
  • Embrace ES8/ES2017 to use async/await functions
  • Use ES6 Module instead of CommonJS

Ready-made Analyzer Plugins

You should check the environment compatibility of each analyzer before you start working with them

Analyzer Node.js Support Browser Support Plugin Repo Developer
Kuromoji kuroshiro-analyzer-kuromoji Hexen Qi
Mecab kuroshiro-analyzer-mecab Hexen Qi
Yahoo Web API kuroshiro-analyzer-yahoo-webapi Hexen Qi

Usage

Node.js (or using a module bundler (e.g. Webpack))

Install with npm package manager:

$ npm install kuroshiro

Load the library:

Support both ES6 Module import and CommonJS require

import Kuroshiro from "kuroshiro";

Instantiate:

const kuroshiro = new Kuroshiro();

Initialize kuroshiro with an instance of analyzer (You could check the apidoc for more information):

// For this example, you should npm install and import the kuromoji analyzer first
import KuromojiAnalyzer from "kuroshiro-analyzer-kuromoji";

// ...

// Initialize
// Here uses async/await, you could also use Promise
await kuroshiro.init(new KuromojiAnalyzer());

Convert what you want:

const result = await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", { to: "hiragana" });

Browser

Add dist/kuroshiro.min.js to your frontend project (you may first build it from source with npm run build after npm install), and in your HTML:

<script src="url/to/kuroshiro.min.js"></script>

For this example, you should also include kuroshiro-analyzer-kuromoji.min.js which you could get from kuroshiro-analyzer-kuromoji

<script src="url/to/kuroshiro-analyzer-kuromoji.min.js"></script>

Instantiate:

var kuroshiro = new Kuroshiro();

Initialize kuroshiro with an instance of analyzer, then convert what you want:

kuroshiro.init(new KuromojiAnalyzer({ dictPath: "url/to/dictFiles" }))
    .then(function () {
        return kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", { to: "hiragana" });
    })
    .then(function(result){
        console.log(result);
    })

API

Constructor

Examples

const kuroshiro = new Kuroshiro();

Instance Medthods

init(analyzer)

Initialize kuroshiro with an instance of analyzer. You should first import an analyzer and initialize it. You can make use of the Ready-made Analyzers listed above. And please refer to documentation of analyzers for analyzer initialization instructions

Arguments

  • analyzer - An instance of analyzer.

Examples

await kuroshiro.init(new KuromojiAnalyzer());

convert(str, [options])

Convert given string to target syllabary with options available

Arguments

  • str - A String to be converted.
  • options - Optional kuroshiro has several convert options as below.
Options Type Default Description
to String "hiragana" Target syllabary [hiragana, katakana, romaji]
mode String "normal" Convert mode [normal, spaced, okurigana, furigana]
romajiSystem* String "hepburn" Romanization system [nippon, passport, hepburn]
delimiter_start String "(" Delimiter(Start)
delimiter_end String ")" Delimiter(End)

*: Param romajiSystem is only applied when the value of param to is romaji. For more about it, check Romanization System

Examples

// normal
await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", {mode:"okurigana", to:"hiragana"});
// result:かんじとれたらてをつなごう、かさなるのはじんせいのライン and レミリアさいこう!
// spaced
await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", {mode:"okurigana", to:"hiragana"});
// result:かんじとれ たら て を つなご う 、 かさなる の は じんせい の ライン   and   レミ リア さいこう !
// okurigana
await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", {mode:"okurigana", to:"hiragana"});
// result: 感(かん)じ取(と)れたら手(て)を繋(つな)ごう、重(かさ)なるのは人生(じんせい)のライン and レミリア最高(さいこう)!
// furigana
await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", {mode:"furigana", to:"hiragana"});
// result: (かん)()れたら()(つな)ごう、(かさ)なるのは人生(じんせい)のライン and レミリア最高(さいこう)

Utils

Examples

const result = Kuroshiro.Util.isHiragana("あ"));

isHiragana(char)

Check if input char is hiragana.

isKatakana(char)

Check if input char is katakana.

isKana(char)

Check if input char is kana.

isKanji(char)

Check if input char is kanji.

isJapanese(char)

Check if input char is Japanese.

hasHiragana(str)

Check if input string has hiragana.

hasKatakana(str)

Check if input string has katakana.

hasKana(str)

Check if input string has kana.

hasKanji(str)

Check if input string has kanji.

hasJapanese(str)

Check if input string has Japanese.

kanaToHiragna(str)

Convert input kana string to hiragana.

kanaToKatakana(str)

Convert input kana string to katakana.

kanaToRomaji(str, system)

Convert input kana string to romaji. Param system accepts "nippon", "passport", "hepburn" (Default: "hepburn").

Romanization System

kuroshiro supports three kinds of romanization systems.

nippon: Nippon-shiki romanization. Refer to ISO 3602 Strict.

passport: Passport-shiki romanization. Refer to Japanese romanization table published by Ministry of Foreign Affairs of Japan.

hepburn: Hepburn romanization. Refer to BS 4812 : 1972.

There is a useful webpage for you to check the difference between these romanization systems.

Notice for Romaji Conversion

Since it's impossible to fully automatically convert furigana directly to romaji because furigana lacks information on pronunciation (Refer to なぜ フリガナでは ダメなのか?).

kuroshiro will not handle chōon when processing directly furigana (kana) -> romaji conversion with every romanization system (Except that Chōonpu will be handled)

For example, you'll get "kousi", "koushi", "koushi" respectively when converts kana "こうし" to romaji using nippon, passport, hepburn romanization system.

The kanji -> romaji conversion with/without furigana mode is unaffected by this logic.

Contributing

Please check CONTRIBUTING.

Inspired By

  • kuromoji
  • wanakana

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].