LoginSignup
3
1

More than 5 years have passed since last update.

golang 版 mb_convert_kana でひらがな・カタカナ・全角・半角を正規化する

Last updated at Posted at 2018-12-04

PicApp アドベントカレンダー4日目です。

なんらかのテキスト処理を行う際の前処理として、ひらがなをすべてカタカナに変換する、半角カタカナを全角カタカナに変換するといった処理を行うことがあると思いますが、golang ではそれを直接実現する標準パッケージはなさそうです。(text/unicode/normそれらしいことはできます

実際のところ、自前で実装するにしても大した規模ではないため、わざわざ外部パッケージの依存を増やすほどのことでもないかもしれません。が、いくつかのパターンを切り替えたり、テストしたりすることを考慮すると、パッケージとして切り出されている方が便利でしょう。

さて、この種の変換でぱっと思い浮かぶのは PHP の mb_convert_kana です。よく使うパターンの変換方法を用意してくれていて、かつそれらの任意の組み合わせが可能です1。golang でこれと同程度のことが実現できるパッケージを探したのですが見つからなかったので作りました。

下記、簡単な使用例です。
全角記号を半角に、全角数字を半角に、英字を半角に、ひらがなとカタカナを濁点なしの全角カタカナに、というオプションを指定しています。


import (
    "fmt"
    "github.com/tomoemon/text_normalizer"
)

func main(){
    s := "# # 5 5 a A a A ア ガ ア ガ あ が"
    n := text_normalizer.NewTextNormalizer(
        text_normalizer.ZenkakuSignToHankaku,
        text_normalizer.ZenkakuNumberToHankaku,
        text_normalizer.AlphabetToHankaku,
        text_normalizer.KanaToZenkakuKatakana,
        text_normalizer.RemoveDakuten)
    fmt.Println(n.Replace(s))
}

出力

# # 5 5 a A a A ア カ ア カ ア カ

このように一つの文字列に含まれる複数の文字種をまとめて変換することができます。


  1. ガラケー向けのサービスを作っていた当時、片っ端からカタカナを半角カタカナに変換するのにお世話になりました 

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1