Index > ひらがなの濁音を清音に変換するには
Tue, August 4, 2009

ひらがなの濁音を清音に変換するには

ドキュメントの最後につける索引ページ、その索引タームのソート問題で、 今回は、濁音は清音に変換した状態でソートする必要がある。 どうすればいいか。

索引ソートの実際の全体の作業ステップとしては以下のようになります・・・

  1. 索引タームを抽出
  2. 索引タームが漢字カタカナひらがな混じりなので、ひらがなだけのよみに変換
  3. 濁音を清音に変換
  4. ソート

これだけが必要になります。

索引ターム自体の「漢字カタカナひらがな混じり」を「よみ(カタカナ・ひらがな)」に変換するには、 たとえば、YahooWebAPIを使います。(茶筅や和布蕪、KAKASIなどでもできると思いますが)

その後、YahooWebAPIで得た「よみ」はカタカナも含まれているので、カタカナをひらがなに変換します。

さらにひらがな中に含まれる濁音を清音に変換します。

すべて準備ができたらソートします。 (ソートはJavaやPythonを使えば簡単です。)

今回は、このステップのうちの濁音を清音に変換する部分の説明です。

SED による変換

sed を使えば以下の通り。

y/がぎぐげご/かきくけこ/
y/ざじずぜぞ/さしすせそ/
y/だぢづでど/たちつてと/
y/ばびぶべぼ/はひふへほ/
y/ぱぴぷぺぽ/はひふへほ/

これを dakuon2seion.sed というファイルに保存し、処理対象となるファイルが foo.txt であれば・・・

$ sed -f dakuon2seion.sed foo.txt > r.txt

とすれば、r.txt に清音に変換した結果が出力されます。

Javaによる変換

SEDによる変換ですが、Cygwin上で行うとうまくいかないようです。 (Ubuntu8.04等で処理すると意図通り変換される。) 詳しく調べていないのですが、Cygwinでインストールできる sed コマンドはUTF-8に対応していないのかもしれません。

そこで、CygwinでもLinuxでも意図通り変換できるように、Javaで書き直したのが以下のコード。

public class DakuonToSeion {

        private static final String dakuon="がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ";
        private static final String seion ="かきくけこさしすせそたちつてとはひふへほはひふへほ";

        public String conv(String s){ 

                for(int i=0; i<dakuon.length(); i++){
                        String s1=dakuon.substring(i,i+1);
                        String s2=seion.substring(i,i+1);

                        s=s.replaceAll(s1,s2);
                }

                return s;
        }


}

地味にひとつずつ変換...芸のないコードですが、とりあえず意図通り作動しているようです。

 Twitter
follow me on Twitter
 Categories