カタカナ→ローマ字変換について
カタカナ→ローマ字変換ができるサンプルクラスはありませんでしょうか?
Product version: HealthShare 2016.1
$ZV: Health Connect 2015.X
ディスカッション (2)0
Comments
KURAUCHIさん、こんにちは。
私の知る限り既存のものはありませんので、簡単に自作してみました。
方針としては、UNICODEでカナ→ローマ字のコードに規則性はありませんので、面倒ですがテーブルを作成して変換するしかないと思います。
サンプルでは、促音や拗音にできる限り対処したつもりですが、抜けがあるかもしれません。
もし、このメソッドをSample.Utilsクラスに保存したとすれば、次のように実行できます。
USER>write ##class(Sample.Utils).cvtKanaToRomaji("コッチノサンプルデドウデショウ?")
kocchinosanpurudedoudeshou?
USER>
kocchinosanpurudedoudeshou?
USER>
ClassMethod cvtKanaToRomaji(inStr As %String) As %String
{
// カナテーブル
Set kanaTbl = $lb("ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ")
Set kanaTbl = kanaTbl_$lb("タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ")
Set kanaTbl = kanaTbl_$lb("マ", "ミ", "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ヲ", "ン")
Set kanaTbl = kanaTbl_$lb("ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド")
Set kanaTbl = kanaTbl_$lb("バ", "ビ", "ブ", "ベ", "ボ", "パ", "ピ", "プ", "ペ", "ポ", "ー")
// ローマ字テーブル
Set romajiTbl = $lb("a", "i", "u", "e", "o", "ka", "ki", "ku", "ke", "ko", "sa", "shi", "su", "se", "so")
Set romajiTbl = romajiTbl_$lb("ta", "chi", "tsu", "te", "to", "na", "ni", "nu", "ne", "no", "ha", "hi", "fu", "he", "ho")
Set romajiTbl = romajiTbl_$lb("ma", "mi", "mu", "me", "mo", "ya", "yu", "yo", "ra", "ri", "ru", "re", "ro", "wa", "wo", "n")
Set romajiTbl = romajiTbl_$lb("ga", "gi", "gu", "ge", "go", "za", "ji", "zu", "ze", "zo", "da", "di", "du", "de", "do")
Set romajiTbl = romajiTbl_$lb("ba", "bi", "bu", "be", "bo", "pa", "pi", "pu", "pe", "po", "h")
// 拗音用カナテーブル
Set kanaTbl = kanaTbl_$lb("キャ", "キュ", "キョ", "シャ", "シュ", "ショ", "チャ", "チュ", "チョ")
Set kanaTbl = kanaTbl_$lb("ニャ", "ニュ", "ニョ", "ヒャ", "ヒュ", "ヒョ", "ミャ", "ミュ", "ミョ", "リャ", "リュ", "リョ")
Set kanaTbl = kanaTbl_$lb("ギャ", "ギュ", "ギョ", "ジャ", "ジュ", "ジョ", "ヂャ", "ヂュ", "ヂョ", "ビャ", "ビュ", "ビョ", "ピャ", "ピュ", "ピョ")
// 拗音用ローマ字テーブル
Set romajiTbl = romajiTbl_$lb("kya", "kyu", "kyo", "sha", "shu", "sho", "cha", "chu", "cho")
Set romajiTbl = romajiTbl_$lb("nya", "nyu", "nyo", "hya", "hyu", "hyo", "mya", "myu", "myo", "rya", "ryu", "ryo")
Set romajiTbl = romajiTbl_$lb("gya", "gyu", "gyo", "ja", "ju", "jo", "dya", "dyu", "dyo", "bya", "byu", "byo", "pya", "pyu", "pyo")
Set outStr = ""
Set sokuonFlag = 0
For i = 1:1:$l(inStr) {
Set ch = $e(inStr, i)
// 促音
if ch = "ッ" {
Set sokuonFlag = 1
Continue
}
// 次に拗音がくれば、くっつける
Set nxtch = $e(inStr, i + 1)
if (nxtch = "ャ") || (nxtch = "ュ") || (nxtch = "ョ") {
Set ch = ch_nxtch
Set i = i + 1
}
// カナテーブルにある文字であれば、対応するローマ字を出力
Set idx = $lf(kanaTbl, ch)
if idx > 0 {
Set och = $li(romajiTbl, idx)
// 促音の次であれば子音を重ねる
if (sokuonFlag = 1) && ($l(och) > 1) {
Set och = $e(och, 1)_och
}
} Else {
Set och = ch
}
Set outStr = outStr_och
Set sokuonFlag = 0
}
Quit outStr
}ご参考になれば幸いです。