Tue, August 4, 2009
ひらがなの濁音を清音に変換するには
ドキュメントの最後につける索引ページ、その索引タームのソート問題で、 今回は、濁音は清音に変換した状態でソートする必要がある。 どうすればいいか。
索引ソートの実際の全体の作業ステップとしては以下のようになります・・・
- 索引タームを抽出
- 索引タームが漢字カタカナひらがな混じりなので、ひらがなだけのよみに変換
- 濁音を清音に変換
- ソート
これだけが必要になります。
索引ターム自体の「漢字カタカナひらがな混じり」を「よみ(カタカナ・ひらがな)」に変換するには、 たとえば、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;
}
}
地味にひとつずつ変換...芸のないコードですが、とりあえず意図通り作動しているようです。