日本語(ローマ字)表記をひらがなにしたい
「shatiku → しゃちく」 にしたい
本日の目的 ローマ字で表現された名前を変換したい。
hatarakusaibou のような名前を ’はたらくさいぼう’のようにひらがな表記に変えたい。
ローマ字を'ひらがな'に変換できれば、ひらがなから漢字にできるかもしれない。
ローマ字→ひらがな→漢字 に変換できればいいよね。
力技もある。
tr 使えばできそうよね。正規表現でパターン網羅すれば良いわけですし。
力技で、 'kakikukeko' を 'かきくけこ' に tr すればいいと思ったけども 変換テーブル用意するのも、めんどくさい
調べたら。 romkan
という gem があった
使ってみる
bundle add romkan
require 'romkan' puts "kitakyuushuu".to_kana
実行結果
$ bundle exec ruby sample.rb きたきゅうしゅう
お、行けそう。
使うときの注意点
意外と使い所が難しい。
wa
はha
にする- アルファベットの大文字が混じるとおかしくなるので、事前に小文字化しておくと良い
- 英単語と混じってる場合、スペースなどの区切りで置換対象から除外する。
- 子音が連続する単語は置換から除外する。
大文字が行頭に混じると困る。例
>> 'Osaka Namba'.to_hepburn.to_kana => "Oさか Nあmば"
小文字にするとまだまし
>> 'Osaka Namba'.downcase.to_hepburn.to_kana => "おさか なmば"
それでも 難波を Namba と表記されると辛いし、大阪をOsakaと表記されると辛い。
英単語混じりはつらい
たとえば、 Death March からはじまる異世界をローマ字とすると、次のようになる。
>> text = 'Death_March_kara_Hajimaru_Isekai_Kyousoukyoku' >> puts text.downcase.gsub(/_/,' ').gsub(/ wa /, 'ha').gsub(/\s|_/,'').to_hepburn.to_kana => "であthまrchからはじまるいせかいきょうそうきょく"
連続する単語を置換するには厳しそうだ。
子音(小文字)が連続する単語や、末尾が子音で終わる単語を置換対象から外すというヒューリスティックな解決策しかなさそう。
text = 'Death_March_kara_Hajimaru_Isekai_Kyousoukyoku' puts text = text.downcase.gsub(/_/,' ') .gsub(/ wa /, 'ha') .split(/\s+/) .map{|e| e=e.to_hepburn.to_kana unless e=~/[^aiueon]$/ ; e } .join(' ') # => death march から はじまる いせかい きょうそうきょく
こんな感じ??
母音の連続は扱えない
連続する母音は、省略表記されることが多いのだけど、これをうまく扱う方法が思いつかない。
'osaka'.to_kana #=> "おさか"
>> 'kyushu'.to_kana => "きゅしゅ"
なんに使うの?
日本語のローマ字で書かれた、大量のPDFがあったり、HTMLファイルがあったり、テーブル定義があったりします。 読みにくくて仕方がないので、ひらがな・漢字に変換できれば便利になるよね。