Ruby で平仮名またはカタカナをローマ字にする
スポンサーリンク
ちょうどいいRubyのライブラリがないか調べたので備忘録。 昔はSuikyoというライブラリがあったはずだけど、今はメンテされていない様子。
ローマ字表記について
そもそも論として、いわゆるヘボン式と訓令式という2大派閥(?)に加えて外務省方式、駅名方式などかなりのバリエーションがある。ヘボン式についても、オリジナル版(Traditional Hepburn)と改訂版(Revised Hepburn)修正ヘボン式(Modified Hepburn)、日本人による改良版などの亜種があるらしい。
ヘボン式にすべきか訓令式にすべきかという議論はあるようですが、ソフトウェア開発者としてはユーザー次第としか言いようがない。 個人的には人名についてはヘボン式の方が字面がきれいに見えるので良いと思いますが。
その2:Hepburn romanization - Wikipedia, the free encyclopedia
とりあえずヘボン式か訓令式か、長音をどう扱うかをメインにirb
で試した結果。
Rubyのライブラリ
主な違いは長音をどうするか、入力に平仮名、カタカナの両方を受け付けるかどうかなど。適当に検索した範囲では、以下の3つ。
romkan
romankana
romaji
romkan
平仮名からローマ字に変換およびローマ字から平仮名に変換。長音はハイフン-
に変換される。
romkan | RubyGems.org | your community gem host
Ruby/Romkan: a Romaji/Kana conversion library for Ruby
ヘボン式から訓令式への変換用のメソッドto_kunrei
がある。
irb(main):001:0> require 'romkan' => true irb(main):002:0> "にほんばし".to_roma => "nihonbashi" irb(main):007:0> "にほんばし".to_roma.to_kunrei => "nihonbasi" irb(main):009:0> "らーめん".to_roma => "ra-men" irb(main):010:0> "おーいにっぽん".to_roma => "o-inippon"
最終更新日が2011年でちょっと不安。irb
では問題なく動いている。
romankana
平仮名からローマ字に変換およびローマ字から平仮名に変換。
romankana | RubyGems.org | your community gem host
irb(main):004:0> require 'romankana' => true irb(main):005:0> "ニホンバシ".to_roman => "nihonbashi" irb(main):006:0> "ジュンイチ".to_roman => "junichi" irb(main):009:0> "ラーメン".to_roman => "raamen" irb(main):010:0> "おーいにっぽん".to_roman => "ooinippon"
長音は直前の母音を重ねるタイプ。下記のようなケースを区別できない。
irb(main):012:0> "さあどうする".to_roman => "saadousuru" irb(main):013:0> "さーどうする".to_roman => "saadousuru"
入力文字列がリアル鬼ごっこのような文体でない限り問題にはならないかも知れない。
参考:ローマ字とひらがなを変換する - Ruby Tips!
romaji
平仮名、カタカナからヘボン式ローマ字に。長音はハイフン-
に変換される。このライブラリは發音(ん)に対してn
とm
を使い分けるようにになっている。
しかし、n
の後ろに母音またはy
が来るケースについては考慮されてない。
romaji | RubyGems.org | your community gem host
GitHub - makimoto/romaji: Romaji-Kana transliterator
irb(main):001:0> require "romaji" => true irb(main):002:0> require "romaji/core_ext/string" => true irb(main):003:0> "にほんばし".romaji => "nihombashi" irb(main):004:0> "ニホンバシ".romaji => "nihombashi" irb(main):005:0> "ジュンイチ".romaji => "junichi" irb(main):006:0> "ラーメン".romaji => "ra-men" irb(main):007:0> "おーいにっぽん".romaji => "o-inippon"
課題など
romkan
以外のライブラリにはn
の次に母音(a,i,u,e,o
)やy
が来た場合にアポストロフィを入れる処理はないように見える。また、訓令式との切り替えはromkan
にしかない。
なお、長音を文字の上にマクロン(またはサーカムフレックス)をつけて表記したい場合は後処理で一工夫必要。
漢字仮名交じりの文字列からローマ字化したい場合は、zipangというライブラリもある。
参考:日本語をURL用ローマ字に変換するgem Zipangを作った - Qiita
簡単ですがここまで。