2023年5月4日木曜日

ひらがなとローマ字の相互変換ライブラリ hiraroma を作った

ひらがなとローマ字の相互変換ライブラリ hiraroma を作りました。

hiraroma

ひらがなをローマ字と相互変換するのは、思っているより難しいです。 以前どこかで拾ってきて 熟成させていたコードが「でゅ → dhu」の変換ができないことに気付き、きちんと変換できるものを作りました。 この変換に対応しているライブラリを探してみましたが、驚くほど少ない。 以下しか見つかりませんでした。
どちらも細かなバグがあるので、参考にさせてもらいながら、ガチのテストを実施したライブラリを作りました。 この手のライブラリはシンプルである反面、format / lint をかけると行数が異常に多くなってしまう (なんと 700行!) 特性がある上、 同じコードを書きたくないのでライブラリ化してしまったほうが良いものの一つです。 ひらがな/カタカナの相互変換などをライブラリに含めているものも多いのですが、実行速度が落ちるだけなのでひらがなだけを対象にしています。 カタカナをローマ字に変換したい人は、適宜変換を行ってから実行してください。

他のライブラリではまともに扱っていない拗音を本気でサポートしています。 これはテストがないととても扱えない代物ですが、膨大なテストがあるとサクッと書けます。 相互変換のテーブルは書き方を変えれば行数が減らせそうな気もしますが、双方向のテーブルを保持するとデバッグが捗るので、この実装でいいかな。 こういう虱潰しの実装が必要なライブラリを書いていると、テストコードの有り難さがよくわかりますね。 ひらがな→ローマ字への変換は、ヘボン式でなるべく短い文字の変換になるようにしました。

実装面ではひらがな→ローマ字の変換はほぼ書き直しています。 パフォーマンスの向上を行い、元のコードの 3倍速にしました。 ちなみにテストコードは SudachiDict をローマ字変換した後にひらがな変換して復元できるかで確認します。 ひらがな/カタカナの両方をテストする必要があります。 他にも絵文字もチェックしています。

超が付くほど地味なライブラリですが、今のところ他に良いものもないので、便利に使えるかと思います。 2023-08-20 追記: 今さらながら romaji-conv を知りました。 これもよくできていますが、変換方式を考えると自作して良かったと思っています。

0 件のコメント: