ひらがな辞書から、任意のかなを含む行を排除するスクリプト(未完成編)
JGAWKを用いて、任意のかなを含む行を排除する方法を考えてみました。
従来は手作業でやっていた排除部分を、どうしてもスクリプト化したかったので……。
第一段階:次のスクリプトにひらがな辞書を通し、不適合部分を■に置換します。
スクリプトを使う場合は、コマンドライン上で
jgawk -f r_sinjis.awk hiragana.txt > r_sinjis.txt
などとします。
下の例では、新JISかなのC段かなのみをコメントアウトしていますので、C段かな以外が全て■に置換されます。
コメントアウト部を変更することにより、任意のかなを■でマスクすることが出来ます。
BEGIN{ } { # gsub(/[い]+/,"■"); # gsub(/[う]+/,"■"); gsub(/[ん]+/,"■"); # gsub(/[か]+/,"■"); # gsub(/[し]+/,"■"); # gsub(/[と]+/,"■"); gsub(/[て]+/,"■"); # gsub(/[な]+/,"■"); gsub(/[の]+/,"■"); # gsub(/[は]+/,"■"); # gsub(/[た]+/,"■"); gsub(/[す]+/,"■"); gsub(/[に]+/,"■"); gsub(/[で]+/,"■"); # gsub(/[き]+/,"■"); gsub(/[、]+/,"■"); # gsub(/[く]+/,"■"); # gsub(/[ま]+/,"■"); gsub(/[っ]+/,"■"); # gsub(/[が]+/,"■"); gsub(/[る]+/,"■"); # gsub(/[も]+/,"■"); gsub(/[こ]+/,"■"); gsub(/[つ]+/,"■"); gsub(/[。]+/,"■"); # gsub(/[じ]+/,"■"); gsub(/[れ]+/,"■"); gsub(/[り]+/,"■"); gsub(/[ー]+/,"■"); gsub(/[ょ]+/,"■"); # gsub(/[お]+/,"■"); # gsub(/[だ]+/,"■"); gsub(/[あ]+/,"■"); gsub(/[を]+/,"■"); # gsub(/[ら]+/,"■"); gsub(/[け]+/,"■"); gsub(/[さ]+/,"■"); # gsub(/[ど]+/,"■"); # gsub(/[よ]+/,"■"); gsub(/[「]+/,"■"); gsub(/[」]+/,"■"); gsub(/[ち]+/,"■"); gsub(/[そ]+/,"■"); gsub(/[せ]+/,"■"); gsub(/[ひ]+/,"■"); gsub(/[…]+/,"■"); # gsub(/[ゅ]+/,"■"); gsub(/[え]+/,"■"); gsub(/[め]+/,"■"); gsub(/[ふ]+/,"■"); gsub(/[み]+/,"■"); # gsub(/[わ]+/,"■"); gsub(/[や]+/,"■"); # gsub(/[ば]+/,"■"); # gsub(/[ゆ]+/,"■"); gsub(/[ろ]+/,"■"); gsub(/[ほ]+/,"■"); gsub(/[び]+/,"■"); gsub(/[ず]+/,"■"); gsub(/[ね]+/,"■"); gsub(/[ぶ]+/,"■"); gsub(/[む]+/,"■"); gsub(/[ご]+/,"■"); gsub(/[げ]+/,"■"); # gsub(/[へ]+/,"■"); # gsub(/[ぎ]+/,"■"); gsub(/[ゃ]+/,"■"); gsub(/[・]+/,"■"); # gsub(/[べ]+/,"■"); gsub(/[ぼ]+/,"■"); gsub(/[ぜ]+/,"■"); gsub(/[ざ]+/,"■"); gsub(/[ぷ]+/,"■"); # gsub(/[ぐ]+/,"■"); gsub(/[ぞ]+/,"■"); gsub(/[ぱ]+/,"■"); gsub(/[づ]+/,"■"); gsub(/[ぽ]+/,"■"); gsub(/[!]+/,"■"); gsub(/[ぺ]+/,"■"); gsub(/[ぴ]+/,"■"); gsub(/[?]+/,"■"); gsub(/[ぇ]+/,"■"); gsub(/[ぁ]+/,"■"); gsub(/[ぉ]+/,"■"); # gsub(/[ぃ]+/,"■"); gsub(/[ぬ]+/,"■"); gsub(/[ぢ]+/,"■"); gsub(/[)]+/,"■"); gsub(/[(]+/,"■"); gsub(/[ぅ]+/,"■"); print $0 } # jgawk '!/■/{print $0;}' r_sinjis.txt
第二段階:次の一行コマンドに通し、■を含む行を除去しつつ出力します。
jgawk '!/■/{print $0;}' r_sinjis.txt > sinjis_c.txt
これで、sinjis_c.txt には、新JISかなでC段にある文字のみで打てる文字列が出力されます。
ただし、重複は削除されていないので……
・表計算ソフトのB列にコピー
・昇順もしくは降順でソート
・表計算ソフトのA1に[ =if(b1=b2;1;0) ]と書き、かなの数だけドラッグして式を複製
・sinjis_c.txtに書き戻す
jgawk '/0/{print $0;}' sinjis_c.txt > sinjis_k.txt
などとして、重複していない部分のみを抽出する必要があります。
うーん、この部分もjgawkのスクリプトにしたいのですが、どうやればいいのか見当も付きません^^;。