natural
Version:
General natural language (tokenizing, stemming (English, Russian, Spanish), part-of-speech tagging, sentiment analysis, classification, inflection, phonetics, tfidf, WordNet, jaro-winkler, Levenshtein distance, Dice's Coefficient) facilities for node.
585 lines (513 loc) • 22.6 kB
JavaScript
/*
Copyright (c) 2012, Guillaume Marty
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
/**
* A transliteration of Katakana & Hiragana to roman characters using the
* modified Hepburn system.
* Rules based on CLDR transform rule set `Katakana-Latin-BGN.xml` but with
* several bugs fixed:
* * Missing ū
* * Missing tsu + voiced kana
* * typos on my~ transliterations
* * support for long vowel sign
* * support for final small tsu
* * support for u + small vowels
* * support for su/shi/ji + small vowels
* * support for tchi/tsu/te/to + small vowels
* * support for fu + small vowels
* * support for katakana middle dot
*
* \@todo Take iteration marks into account.
*/
const replacer = require('../../util/utils').replacer
const transliterationTable1 = {
ウァ: 'wa', // KATAKANA LETTER U + SMALL A
ウィ: 'wi', // KATAKANA LETTER U + SMALL I
ウェ: 'we', // KATAKANA LETTER U + SMALL E
ウォ: 'wo', // KATAKANA LETTER U + SMALL O
ウー: 'ū', // KATAKANA LETTER VU + PROLONGED SOUND MARK
ヴァ: 'va', // KATAKANA LETTER VU + SMALL A
ヴィ: 'vi', // KATAKANA LETTER VU + SMALL I
ヴェ: 've', // KATAKANA LETTER VU + SMALL E
ヴォ: 'vo', // KATAKANA LETTER VU + SMALL O
ヴュ: 'vyu', // KATAKANA LETTER VU + SMALL YU
うぁ: 'wa', // HIRAGANA LETTER U + SMALL A
うぃ: 'wi', // HIRAGANA LETTER U + SMALL I
うぇ: 'we', // HIRAGANA LETTER U + SMALL E
うぉ: 'wo', // HIRAGANA LETTER U + SMALL O
うー: 'ū', // HIRAGANA LETTER VU + PROLONGED SOUND MARK
ゔぁ: 'va', // HIRAGANA LETTER VU + SMALL A
ゔぃ: 'vi', // HIRAGANA LETTER VU + SMALL I
ゔぇ: 've', // HIRAGANA LETTER VU + SMALL E
ゔぉ: 'vo', // HIRAGANA LETTER VU + SMALL O
ゔゅ: 'vyu' // HIRAGANA LETTER VU + SMALL YU
}
const transliterationTable2 = {
イェ: 'ye', // KATAKANA LETTER I + SMALL E
ア: 'a', // KATAKANA LETTER A
イ: 'i', // KATAKANA LETTER I
ウウ: 'ū', // KATAKANA LETTER U + U
ウ: 'u', // KATAKANA LETTER U
エ: 'e', // KATAKANA LETTER E
オウ: 'ō', // KATAKANA LETTER O + U
オ: 'o', // KATAKANA LETTER O
クァ: 'kwa', // KATAKANA LETTER KU + SMALL A
クィ: 'kwi', // KATAKANA LETTER KU + SMALL I
クェ: 'kwe', // KATAKANA LETTER KU + SMALL E
クォ: 'kwo', // KATAKANA LETTER KU + SMALL O
カ: 'ka', // KATAKANA LETTER KA
キョウ: 'kyō', // KATAKANA LETTER KI + SMALL YO + U
キュウ: 'kyū', // KATAKANA LETTER KI + SMALL YU + U
キャ: 'kya', // KATAKANA LETTER KI + SMALL YA
キョ: 'kyo', // KATAKANA LETTER KI + SMALL YO
キュ: 'kyu', // KATAKANA LETTER KI + SMALL YU
キ: 'ki', // KATAKANA LETTER KI
ク: 'ku', // KATAKANA LETTER KU
ケ: 'ke', // KATAKANA LETTER KE
コウ: 'kō', // KATAKANA LETTER KO + U
コ: 'ko', // KATAKANA LETTER KO
シェ: 'she', // KATAKANA LETTER SI + SMALL E
スィ: 'si', // KATAKANA LETTER SU + SMALL I
サ: 'sa', // KATAKANA LETTER SA
ショウ: 'shō', // KATAKANA LETTER SI + SMALL YO + U
シュウ: 'shū', // KATAKANA LETTER SI + SMALL YU + U
シャ: 'sha', // KATAKANA LETTER SI + SMALL YA
ショ: 'sho', // KATAKANA LETTER SI + SMALL YO
シュ: 'shu', // KATAKANA LETTER SI + SMALL YU
シ: 'shi', // KATAKANA LETTER SI
スウ: 'sū', // KATAKANA LETTER SU + U
ス: 'su', // KATAKANA LETTER SU
セ: 'se', // KATAKANA LETTER SE
ソウ: 'sō', // KATAKANA LETTER SO + U
ソ: 'so', // KATAKANA LETTER SO
チェ: 'che', // KATAKANA LETTER TI + SMALL E
ツァ: 'tsa', // KATAKANA LETTER TU + SMALL A
ツィ: 'tsi', // KATAKANA LETTER TU + SMALL I
ツェ: 'tse', // KATAKANA LETTER TU + SMALL E
ツォ: 'tso', // KATAKANA LETTER TU + SMALL O
ティ: 'ti', // KATAKANA LETTER TE + SMALL I
ディ: 'di', // KATAKANA LETTER DE + SMALL I
テュ: 'tyu', // KATAKANA LETTER TE + SMALL YU
デュ: 'dyu', // KATAKANA LETTER DE + SMALL YU
トィ: 'twi', // KATAKANA LETTER TO + SMALL I
トゥ: 'tu', // KATAKANA LETTER TO + SMALL U
ドィ: 'dwi', // KATAKANA LETTER DO + SMALL I
ドゥ: 'du', // KATAKANA LETTER DO + SMALL U
タ: 'ta', // KATAKANA LETTER TA
チョウ: 'chō', // KATAKANA LETTER TI + SMALL YO + U
チュウ: 'chū', // KATAKANA LETTER TI + SMALL YU + U
チャ: 'cha', // KATAKANA LETTER TI + SMALL YA
チョ: 'cho', // KATAKANA LETTER TI + SMALL YO
チュ: 'chu', // KATAKANA LETTER TI + SMALL YU
チ: 'chi', // KATAKANA LETTER TI
ツウ: 'tsū', // KATAKANA LETTER TU + U
ツ: 'tsu', // KATAKANA LETTER TU
テ: 'te', // KATAKANA LETTER TE
トウ: 'tō', // KATAKANA LETTER TO + U
ト: 'to', // KATAKANA LETTER TO
ナ: 'na', // KATAKANA LETTER NA
ニョウ: 'nyō', // KATAKANA LETTER NI + SMALL YO + U
ニュウ: 'nyū', // KATAKANA LETTER NI + SMALL YU + U
ニャ: 'nya', // KATAKANA LETTER NI + SMALL YA
ニョ: 'nyo', // KATAKANA LETTER NI + SMALL YO
ニュ: 'nyu', // KATAKANA LETTER NI + SMALL YU
ニ: 'ni', // KATAKANA LETTER NI
ヌウ: 'nū', // KATAKANA LETTER NU + U
ヌ: 'nu', // KATAKANA LETTER NU
ネ: 'ne', // KATAKANA LETTER NE
ノウ: 'nō', // KATAKANA LETTER NO + U
ノ: 'no', // KATAKANA LETTER NO
ファ: 'fa', // KATAKANA LETTER HU + SMALL A
フィ: 'fi', // KATAKANA LETTER HU + SMALL I
// 'フゥ': 'fu', // KATAKANA LETTER HU + SMALL U
フェ: 'fe', // KATAKANA LETTER HU + SMALL E
フォ: 'fo', // KATAKANA LETTER HU + SMALL O
フュ: 'fyu', // KATAKANA LETTER HU + SMALL YU
ホェ: 'hwe', // KATAKANA LETTER HO + SMALL E
ハ: 'ha', // KATAKANA LETTER HA
ヒョウ: 'hyō', // KATAKANA LETTER HI + SMALL YO + U
ヒュウ: 'hyū', // KATAKANA LETTER HI + SMALL YU + U
ヒャ: 'hya', // KATAKANA LETTER HI + SMALL YA
ヒョ: 'hyo', // KATAKANA LETTER HI + SMALL YO
ヒュ: 'hyu', // KATAKANA LETTER HI + SMALL YU
ヒ: 'hi', // KATAKANA LETTER HI
フウ: 'fū', // KATAKANA LETTER HU + U
フ: 'fu', // KATAKANA LETTER HU
ヘ: 'he', // KATAKANA LETTER HE
ホウ: 'hō', // KATAKANA LETTER HO + U
ホ: 'ho', // KATAKANA LETTER HO
マ: 'ma', // KATAKANA LETTER MA
ミョウ: 'myō', // KATAKANA LETTER MI + SMALL YO + U
ミュウ: 'myū', // KATAKANA LETTER MI + SMALL YU + U
ミャ: 'mya', // KATAKANA LETTER MI + SMALL YA
ミョ: 'myo', // KATAKANA LETTER MI + SMALL YO
ミュ: 'myu', // KATAKANA LETTER MI + SMALL YU
ミ: 'mi', // KATAKANA LETTER MI
ムウ: 'mū', // KATAKANA LETTER MU + U
ム: 'mu', // KATAKANA LETTER MU
メ: 'me', // KATAKANA LETTER ME
モウ: 'mō', // KATAKANA LETTER MO + U
モ: 'mo', // KATAKANA LETTER MO
ヤ: 'ya', // KATAKANA LETTER YA
ユウ: 'yū', // KATAKANA LETTER YU + U
ユ: 'yu', // KATAKANA LETTER YU
ヨウ: 'yō', // KATAKANA LETTER YO + U
ヨ: 'yo', // KATAKANA LETTER YO
リェ: 'rye', // KATAKANA LETTER RI + SMALL E
ラ: 'ra', // KATAKANA LETTER RA
リョウ: 'ryō', // KATAKANA LETTER RI + SMALL YO + U
リュウ: 'ryū', // KATAKANA LETTER RI + SMALL YU + U
リャ: 'rya', // KATAKANA LETTER RI + SMALL YA
リョ: 'ryo', // KATAKANA LETTER RI + SMALL YO
リュ: 'ryu', // KATAKANA LETTER RI + SMALL YU
リ: 'ri', // KATAKANA LETTER RI
ルウ: 'rū', // KATAKANA LETTER RU + U
ル: 'ru', // KATAKANA LETTER RU
レ: 're', // KATAKANA LETTER RE
ロウ: 'rō', // KATAKANA LETTER RO + U
ロ: 'ro', // KATAKANA LETTER RO
ワ: 'wa', // KATAKANA LETTER WA
ヰ: 'i', // KATAKANA LETTER WI
ヱ: 'e', // KATAKANA LETTER WE
ヲ: 'o', // KATAKANA LETTER WO
ン: 'n', // KATAKANA LETTER N
グァ: 'gwa', // KATAKANA LETTER GU + SMALL A
グィ: 'gwi', // KATAKANA LETTER GU + SMALL I
グェ: 'gwe', // KATAKANA LETTER GU + SMALL E
グォ: 'gwo', // KATAKANA LETTER GU + SMALL O
ガ: 'ga', // KATAKANA LETTER GA
ギョウ: 'gyō', // KATAKANA LETTER GI + SMALL YO + U
ギュウ: 'gyū', // KATAKANA LETTER GI + SMALL YU + U
ギャ: 'gya', // KATAKANA LETTER GI + SMALL YA
ギョ: 'gyo', // KATAKANA LETTER GI + SMALL YO
ギュ: 'gyu', // KATAKANA LETTER GI + SMALL YU
ギ: 'gi', // KATAKANA LETTER GI
グウ: 'gū', // KATAKANA LETTER GU + U
グ: 'gu', // KATAKANA LETTER GU
ゲ: 'ge', // KATAKANA LETTER GE
ゴウ: 'gō', // KATAKANA LETTER GO + U
ゴ: 'go', // KATAKANA LETTER GO
ジェ: 'je', // KATAKANA LETTER ZI + SMALL E
ズィ: 'zi', // KATAKANA LETTER ZU + SMALL I
ザ: 'za', // KATAKANA LETTER ZA
ジョウ: 'jō', // KATAKANA LETTER ZI + SMALL YO + U
ジュウ: 'jū', // KATAKANA LETTER ZI + SMALL YU + U
ジャ: 'ja', // KATAKANA LETTER ZI + SMALL YA
ジョ: 'jo', // KATAKANA LETTER ZI + SMALL YO
ジュ: 'ju', // KATAKANA LETTER ZI + SMALL YU
ジ: 'ji', // KATAKANA LETTER ZI
ズウ: 'zū', // KATAKANA LETTER ZU + U
ズ: 'zu', // KATAKANA LETTER ZU
ゼ: 'ze', // KATAKANA LETTER ZE
ゾウ: 'zō', // KATAKANA LETTER ZO + U
ゾ: 'zo', // KATAKANA LETTER ZO
ダ: 'da', // KATAKANA LETTER DA
ヂ: 'ji', // KATAKANA LETTER DI
ヅウ: 'zū', // KATAKANA LETTER DU + U
ヅ: 'zu', // KATAKANA LETTER DU
デ: 'de', // KATAKANA LETTER DE
ドウ: 'dō', // KATAKANA LETTER DO + U
ド: 'do', // KATAKANA LETTER DO
ブュ: 'byu', // KATAKANA LETTER BU + SMALL YU
バ: 'ba', // KATAKANA LETTER BA
ビョウ: 'byō', // KATAKANA LETTER BI + SMALL YO + U
ビュウ: 'byū', // KATAKANA LETTER BI + SMALL YU + U
ビャ: 'bya', // KATAKANA LETTER BI + SMALL YA
ビョ: 'byo', // KATAKANA LETTER BI + SMALL YO
ビュ: 'byu', // KATAKANA LETTER BI + SMALL YU
ビ: 'bi', // KATAKANA LETTER BI
ブウ: 'bū', // KATAKANA LETTER BU + U
ブ: 'bu', // KATAKANA LETTER BU
ベ: 'be', // KATAKANA LETTER BE
ボウ: 'bō', // KATAKANA LETTER BO + U
ボ: 'bo', // KATAKANA LETTER BO
パ: 'pa', // KATAKANA LETTER PA
ピョウ: 'pyō', // KATAKANA LETTER PI + SMALL YO + U
ピュウ: 'pyū', // KATAKANA LETTER PI + SMALL YU + U
ピャ: 'pya', // KATAKANA LETTER PI + SMALL YA
ピョ: 'pyo', // KATAKANA LETTER PI + SMALL YO
ピュ: 'pyu', // KATAKANA LETTER PI + SMALL YU
ピ: 'pi', // KATAKANA LETTER PI
プウ: 'pū', // KATAKANA LETTER PU + U
プ: 'pu', // KATAKANA LETTER PU
ペ: 'pe', // KATAKANA LETTER PE
ポウ: 'pō', // KATAKANA LETTER PO + U
ポ: 'po', // KATAKANA LETTER PO
ヴ: 'v', // KATAKANA LETTER VU
'・': ' ', // KATAKANA MIDDLE DOT
いぇ: 'ye', // HIRAGANA LETTER I + SMALL E
あ: 'a', // HIRAGANA LETTER A
い: 'i', // HIRAGANA LETTER I
うう: 'ū', // HIRAGANA LETTER U + U
う: 'u', // HIRAGANA LETTER U
え: 'e', // HIRAGANA LETTER E
おう: 'ō', // HIRAGANA LETTER O + U
お: 'o', // HIRAGANA LETTER O
くぁ: 'kwa', // HIRAGANA LETTER KU + SMALL A
くぃ: 'kwi', // HIRAGANA LETTER KU + SMALL I
くぇ: 'kwe', // HIRAGANA LETTER KU + SMALL E
くぉ: 'kwo', // HIRAGANA LETTER KU + SMALL O
か: 'ka', // HIRAGANA LETTER KA
きょう: 'kyō', // HIRAGANA LETTER KI + SMALL YO + U
きゅう: 'kyū', // HIRAGANA LETTER KI + SMALL YU + U
きゃ: 'kya', // HIRAGANA LETTER KI + SMALL YA
きょ: 'kyo', // HIRAGANA LETTER KI + SMALL YO
きゅ: 'kyu', // HIRAGANA LETTER KI + SMALL YU
き: 'ki', // HIRAGANA LETTER KI
くう: 'kū', // HIRAGANA LETTER KU + U
く: 'ku', // HIRAGANA LETTER KU
け: 'ke', // HIRAGANA LETTER KE
こう: 'kō', // HIRAGANA LETTER KO + U
こ: 'ko', // HIRAGANA LETTER KO
しぇ: 'she', // HIRAGANA LETTER SI + SMALL E
すぃ: 'si', // HIRAGANA LETTER SU + SMALL I
さ: 'sa', // HIRAGANA LETTER SA
しょう: 'shō', // HIRAGANA LETTER SI + SMALL YO + U
しゅう: 'shū', // HIRAGANA LETTER SI + SMALL YU + U
しゃ: 'sha', // HIRAGANA LETTER SI + SMALL YA
しょ: 'sho', // HIRAGANA LETTER SI + SMALL YO
しゅ: 'shu', // HIRAGANA LETTER SI + SMALL YU
し: 'shi', // HIRAGANA LETTER SI
すう: 'sū', // HIRAGANA LETTER SU + U
す: 'su', // HIRAGANA LETTER SU
せ: 'se', // HIRAGANA LETTER SE
そう: 'sō', // HIRAGANA LETTER SO + U
そ: 'so', // HIRAGANA LETTER SO
ちぇ: 'che', // HIRAGANA LETTER TI + SMALL E
つぁ: 'tsa', // HIRAGANA LETTER TU + SMALL A
つぃ: 'tsi', // HIRAGANA LETTER TU + SMALL I
つぇ: 'tse', // HIRAGANA LETTER TU + SMALL E
つぉ: 'tso', // HIRAGANA LETTER TU + SMALL O
てぃ: 'ti', // HIRAGANA LETTER TE + SMALL I
でぃ: 'di', // HIRAGANA LETTER DE + SMALL I
てゅ: 'tyu', // HIRAGANA LETTER TE + SMALL YU
でゅ: 'dyu', // HIRAGANA LETTER DE + SMALL YU
とぃ: 'twi', // HIRAGANA LETTER TO + SMALL I
とぅ: 'tu', // HIRAGANA LETTER TO + SMALL U
どぃ: 'dwi', // HIRAGANA LETTER DO + SMALL I
どぅ: 'du', // HIRAGANA LETTER DO + SMALL U
た: 'ta', // HIRAGANA LETTER TA
ちょう: 'chō', // HIRAGANA LETTER TI + SMALL YO + U
ちゅう: 'chū', // HIRAGANA LETTER TI + SMALL YU + U
ちゃ: 'cha', // HIRAGANA LETTER TI + SMALL YA
ちょ: 'cho', // HIRAGANA LETTER TI + SMALL YO
ちゅ: 'chu', // HIRAGANA LETTER TI + SMALL YU
ち: 'chi', // HIRAGANA LETTER TI
つう: 'tsū', // HIRAGANA LETTER TU + U
つ: 'tsu', // HIRAGANA LETTER TU
て: 'te', // HIRAGANA LETTER TE
とう: 'tō', // HIRAGANA LETTER TO + U
と: 'to', // HIRAGANA LETTER TO
な: 'na', // HIRAGANA LETTER NA
にょう: 'nyō', // HIRAGANA LETTER NI + SMALL YO + U
にゅう: 'nyū', // HIRAGANA LETTER NI + SMALL YU + U
にゃ: 'nya', // HIRAGANA LETTER NI + SMALL YA
にょ: 'nyo', // HIRAGANA LETTER NI + SMALL YO
にゅ: 'nyu', // HIRAGANA LETTER NI + SMALL YU
に: 'ni', // HIRAGANA LETTER NI
ぬう: 'nū', // HIRAGANA LETTER NU + U
ぬ: 'nu', // HIRAGANA LETTER NU
ね: 'ne', // HIRAGANA LETTER NE
のう: 'nō', // HIRAGANA LETTER NO + U
の: 'no', // HIRAGANA LETTER NO
ふぁ: 'fa', // HIRAGANA LETTER HU + SMALL A
ふぃ: 'fi', // HIRAGANA LETTER HU + SMALL I
// 'ふぅ': 'fu', // HIRAGANA LETTER HU + SMALL U
ふぇ: 'fe', // HIRAGANA LETTER HU + SMALL E
ふぉ: 'fo', // HIRAGANA LETTER HU + SMALL O
ふゅ: 'fyu', // HIRAGANA LETTER HU + SMALL YU
ほぇ: 'hwe', // HIRAGANA LETTER HO + SMALL E
は: 'ha', // HIRAGANA LETTER HA
ひょう: 'hyō', // HIRAGANA LETTER HI + SMALL YO + U
ひゅう: 'hyū', // HIRAGANA LETTER HI + SMALL YU + U
ひゃ: 'hya', // HIRAGANA LETTER HI + SMALL YA
ひょ: 'hyo', // HIRAGANA LETTER HI + SMALL YO
ひゅ: 'hyu', // HIRAGANA LETTER HI + SMALL YU
ひ: 'hi', // HIRAGANA LETTER HI
ふう: 'fū', // HIRAGANA LETTER HU + U
ふ: 'fu', // HIRAGANA LETTER HU
へ: 'he', // HIRAGANA LETTER HE
ほう: 'hō', // HIRAGANA LETTER HO + U
ほ: 'ho', // HIRAGANA LETTER HO
ま: 'ma', // HIRAGANA LETTER MA
みょう: 'myō', // HIRAGANA LETTER MI + SMALL YO + U
みゅう: 'myū', // HIRAGANA LETTER MI + SMALL YU + U
みゃ: 'mya', // HIRAGANA LETTER MI + SMALL YA
みょ: 'myo', // HIRAGANA LETTER MI + SMALL YO
みゅ: 'myu', // HIRAGANA LETTER MI + SMALL YU
み: 'mi', // HIRAGANA LETTER MI
むう: 'mū', // HIRAGANA LETTER MU + U
む: 'mu', // HIRAGANA LETTER MU
め: 'me', // HIRAGANA LETTER ME
もう: 'mō', // HIRAGANA LETTER MO + U
も: 'mo', // HIRAGANA LETTER MO
や: 'ya', // HIRAGANA LETTER YA
ゆう: 'yū', // HIRAGANA LETTER YU + U
ゆ: 'yu', // HIRAGANA LETTER YU
よう: 'yō', // HIRAGANA LETTER YO + U
よ: 'yo', // HIRAGANA LETTER YO
りぇ: 'rye', // HIRAGANA LETTER RI + SMALL E
ら: 'ra', // HIRAGANA LETTER RA
りょう: 'ryō', // HIRAGANA LETTER RI + SMALL YO + U
りゅう: 'ryū', // HIRAGANA LETTER RI + SMALL YU + U
りゃ: 'rya', // HIRAGANA LETTER RI + SMALL YA
りょ: 'ryo', // HIRAGANA LETTER RI + SMALL YO
りゅ: 'ryu', // HIRAGANA LETTER RI + SMALL YU
り: 'ri', // HIRAGANA LETTER RI
るう: 'rū', // HIRAGANA LETTER RU + U
る: 'ru', // HIRAGANA LETTER RU
れ: 're', // HIRAGANA LETTER RE
ろう: 'rō', // HIRAGANA LETTER RO + U
ろ: 'ro', // HIRAGANA LETTER RO
わ: 'wa', // HIRAGANA LETTER WA
ゐ: 'i', // HIRAGANA LETTER WI
ゑ: 'e', // HIRAGANA LETTER WE
を: 'o', // HIRAGANA LETTER WO
ん: 'n', // HIRAGANA LETTER N
ぐぁ: 'gwa', // HIRAGANA LETTER GU + SMALL A
ぐぃ: 'gwi', // HIRAGANA LETTER GU + SMALL I
ぐぇ: 'gwe', // HIRAGANA LETTER GU + SMALL E
ぐぉ: 'gwo', // HIRAGANA LETTER GU + SMALL O
が: 'ga', // HIRAGANA LETTER GA
ぎょう: 'gyō', // HIRAGANA LETTER GI + SMALL YO + U
ぎゅう: 'gyū', // HIRAGANA LETTER GI + SMALL YU + U
ぎゃ: 'gya', // HIRAGANA LETTER GI + SMALL YA
ぎょ: 'gyo', // HIRAGANA LETTER GI + SMALL YO
ぎゅ: 'gyu', // HIRAGANA LETTER GI + SMALL YU
ぎ: 'gi', // HIRAGANA LETTER GI
ぐう: 'gū', // HIRAGANA LETTER GU + U
ぐ: 'gu', // HIRAGANA LETTER GU
げ: 'ge', // HIRAGANA LETTER GE
ごう: 'gō', // HIRAGANA LETTER GO + U
ご: 'go', // HIRAGANA LETTER GO
じぇ: 'je', // HIRAGANA LETTER ZI + SMALL E
ずぃ: 'zi', // HIRAGANA LETTER ZU + SMALL I
ざ: 'za', // HIRAGANA LETTER ZA
じょう: 'jō', // HIRAGANA LETTER ZI + SMALL YO + U
じゅう: 'jū', // HIRAGANA LETTER ZI + SMALL YU + U
じゃ: 'ja', // HIRAGANA LETTER ZI + SMALL YA
じょ: 'jo', // HIRAGANA LETTER ZI + SMALL YO
じゅ: 'ju', // HIRAGANA LETTER ZI + SMALL YU
じ: 'ji', // HIRAGANA LETTER ZI
ずう: 'zū', // HIRAGANA LETTER ZU + U
ず: 'zu', // HIRAGANA LETTER ZU
ぜ: 'ze', // HIRAGANA LETTER ZE
ぞう: 'zō', // HIRAGANA LETTER ZO + U
ぞ: 'zo', // HIRAGANA LETTER ZO
だ: 'da', // HIRAGANA LETTER DA
ぢ: 'ji', // HIRAGANA LETTER DI
づう: 'zū', // HIRAGANA LETTER DU + U
づ: 'zu', // HIRAGANA LETTER DU
で: 'de', // HIRAGANA LETTER DE
どう: 'dō', // HIRAGANA LETTER DO + U
ど: 'do', // HIRAGANA LETTER DO
ぶゅ: 'byu', // HIRAGANA LETTER BU + SMALL YU
ば: 'ba', // HIRAGANA LETTER BA
びょう: 'byō', // HIRAGANA LETTER BI + SMALL YO + U
びゅう: 'byū', // HIRAGANA LETTER BI + SMALL YU + U
びゃ: 'bya', // HIRAGANA LETTER BI + SMALL YA
びょ: 'byo', // HIRAGANA LETTER BI + SMALL YO
びゅ: 'byu', // HIRAGANA LETTER BI + SMALL YU
び: 'bi', // HIRAGANA LETTER BI
ぶう: 'bū', // HIRAGANA LETTER BU + U
ぶ: 'bu', // HIRAGANA LETTER BU
べ: 'be', // HIRAGANA LETTER BE
ぼう: 'bō', // HIRAGANA LETTER BO + U
ぼ: 'bo', // HIRAGANA LETTER BO
ぱ: 'pa', // HIRAGANA LETTER PA
ぴょう: 'pyō', // HIRAGANA LETTER PI + SMALL YO + U
ぴゅう: 'pyū', // HIRAGANA LETTER PI + SMALL YU + U
ぴゃ: 'pya', // HIRAGANA LETTER PI + SMALL YA
ぴょ: 'pyo', // HIRAGANA LETTER PI + SMALL YO
ぴゅ: 'pyu', // HIRAGANA LETTER PI + SMALL YU
ぴ: 'pi', // HIRAGANA LETTER PI
ぷう: 'pū', // HIRAGANA LETTER PU + U
ぷ: 'pu', // HIRAGANA LETTER PU
ぺ: 'pe', // HIRAGANA LETTER PE
ぽう: 'pō', // HIRAGANA LETTER PO + U
ぽ: 'po', // HIRAGANA LETTER PO
ゔ: 'v' // HIRAGANA LETTER VU
}
const transliterationTable3 = {
aァ: 'ā',
aぁ: 'ā',
iィー: 'ī',
iィ: 'ī',
iぃー: 'ī',
iぃ: 'ī',
aー: 'ā',
iー: 'ī',
uー: 'ū',
eー: 'ē',
oー: 'ō',
// Fallback for small vowels
ァ: 'a',
ィ: 'i',
ゥ: 'u',
ェ: 'e',
ォ: 'o',
ぁ: 'a',
ぃ: 'i',
ぅ: 'u',
ぇ: 'e',
ぉ: 'o'
}
const replace1 = replacer(transliterationTable1)
const replace2 = replacer(transliterationTable2)
const replace3 = replacer(transliterationTable3)
module.exports = function (str) {
str = replace1(str)
str = str
.replace(/ッ(?=[ン])/g, 'n')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[ん])/g, 'n')// HIRAGANA LETTER SMALL TU
.replace(/ン(?=[バビブベボパピプペポマミムメモ])/g, 'm')// KATAKANA LETTER N
.replace(/ん(?=[ばびぶべぼぱぴぷぺぽまみむめも])/g, 'm')// HIRAGANA LETTER N
.replace(/ン(?=[ヤユヨアイウエオ])/g, "n'")// KATAKANA LETTER N
.replace(/ん(?=[やゆよあいうえお])/g, "n'")// HIRAGANA LETTER N
str = str
.replace(/ッ(?=[カキクケコ])/g, 'k')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[かきくけこ])/g, 'k')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ガギグゲゴ])/g, 'g')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[がぎぐげご])/g, 'g')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[サシスセソ])/g, 's')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[さしすせそ])/g, 's')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ザズゼゾ])/g, 'z')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[ざずぜぞ])/g, 'z')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ジ])/g, 'j')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[じ])/g, 'j')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[タチツテト])/g, 't')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[たちつてと])/g, 't')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ダヂヅデド])/g, 't')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[だぢづでど])/g, 't')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ハヒヘホ])/g, 'h')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[はひへほ])/g, 'h')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[フ])/g, 'f')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[ふ])/g, 'f')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[バビブベボ])/g, 'b')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[ばびぶべぼ])/g, 'b')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[パピプペポ])/g, 'p')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[ぱぴぷぺぽ])/g, 'p')// HIRAGANA LETTER SMALL TU
.replace(/ッ(?=[ラリルレロ])/g, 'r')// KATAKANA LETTER SMALL TU
.replace(/っ(?=[らりるれろ])/g, 'r')// HIRAGANA LETTER SMALL TU
str = replace2(str)
str = replace3(str)
str = str
.replace(/(ッ|っ)\B/g, 't')// FINAL KATAKANA LETTER SMALL TU
return str
}