[sed][awk]カタカナをアルファベットに一撃置換する
あるシステムの入力項目から入力されたテキストデータから、カタカナを強制的にアルファベット(ローマ字)へ変換したいという要件が出てきました。さすがにワンライナーでやるにはキツいので、sedの置換ファイルを作ってやるのが楽ですね。
s/キャ/kya/g s/キュ/kyu/g s/キョ/kyo/g s/ギャ/gya/g s/ギュ/gyu/g s/ギョ/gyo/g s/シャ/sha/g s/シュ/shu/g s/ショ/sho/g s/ジャ/ja/g s/ジュ/ju/g s/ジョ/jo/g s/チャ/cha/g s/チュ/chu/g s/チョ/cho/g s/ヂャ/ja/g s/ヂュ/ju/g s/ヂョ/jo/g s/ニャ/nya/g s/ニュ/nyu/g s/ニョ/nyo/g s/ヒャ/hya/g s/ヒュ/hyu/g s/ヒョ/hyo/g s/ビャ/bya/g s/ビュ/byu/g s/ビョ/byo/g s/ピャ/pya/g s/ピュ/pyu/g s/ピョ/pyo/g s/ミャ/mya/g s/ミュ/myu/g s/ミョ/myo/g s/リャ/rya/g s/リュ/ryu/g s/リョ/ryo/g s/ファ/fa/g s/フィ/fi/g s/フェ/fe/g s/フォ/fo/g s/ティ/thi/g s/ディ/dhi/g s/ヴァ/va/g s/ヴィ/vi/g s/ヴ/vu/g s/ヴェ/ve/g s/ヴォ/vo/g s/ア/a/g s/イ/i/g s/ウ/u/g s/エ/e/g s/オ/o/g s/カ/ka/g s/ガ/ga/g s/キ/ki/g s/ギ/gi/g s/ク/ku/g s/グ/gu/g s/ケ/ke/g s/ゲ/ge/g s/コ/ko/g s/ゴ/go/g s/サ/sa/g s/ザ/za/g s/シ/shi/g s/ジ/ji/g s/ス/su/g s/ズ/zu/g s/セ/se/g s/ゼ/ze/g s/ソ/so/g s/ゾ/zo/g s/タ/ta/g s/ダ/da/g s/チ/chi/g s/ヂ/ji/g s/ツ/tsu/g s/ヅ/zu/g s/テ/te/g s/デ/de/g s/ト/to/g s/ド/do/g s/ナ/na/g s/ニ/ni/g s/ヌ/nu/g s/ネ/ne/g s/ノ/no/g s/ハ/ha/g s/バ/ba/g s/パ/pa/g s/ヒ/hi/g s/ビ/bi/g s/ピ/pi/g s/フ/fu/g s/ブ/bu/g s/プ/pu/g s/ヘ/he/g s/ベ/be/g s/ペ/pe/g s/ホ/ho/g s/ボ/bo/g s/ポ/po/g s/マ/ma/g s/ミ/mi/g s/ム/mu/g s/メ/me/g s/モ/mo/g s/ヤ/ya/g s/ユ/yu/g s/ヨ/yo/g s/ラ/ra/g s/リ/ri/g s/ル/ru/g s/レ/re/g s/ロ/ro/g s/ワ/wa/g s/ヲ/wo/g s/ン/n/g s/ー/-/g
例えば大岡山(オオオカヤマ)をカタカナからローマ字に変換するにはこうします。
$ echo "オオオカヤマ" | sed -f katakana2alpha.sed oookayama
先頭文字のみを大文字にするには、awkのワンライナーを使うと便利です。今回のワンライナーは py4s-tnk さんの一行をパk・・・参考にさせていただきました。
$ echo "オオオカヤマ" | sed -f katakana2alpha.sed | awk '{print toupper(substr($1,1,1))substr($1,2)}' Oookayama
上に貼り付けたコードをご覧いただけるとおわかりいただけるかと思いますが、2文字で発音する文字をファイルの最初に持ってきています。こうすることで、「貴社の記者は汽車で帰社した(キシャノキシャハキシャデキシャシタ)」をうまく変換することができます。
$ echo "キシャノキシャハキシャデキシャシタ" | sed -f katakana2alpha.sed kishanokishahakishadekishashita
もしこの工夫がなければ・・・
$ echo "キシャノキシャハキシャデキシャシタ" | sed -f katakana2alpha.sed kishiャnokishiャhakishiャdekishiャshita
このように、1文字目でマッチさせてしまうため、拗音があると無視されてしまうのです。拗音だけの変換テーブルを作ってやればいいじゃんという声もあるかも知れませんが、そもそも拗音だけ発音するという機会はないので作っていません。
どうしてもファイルを作りたくないという方はワンライナーでどうぞ。
$ echo "キシャノキシャハキシャデキシャシタ" | sed -e "s/キャ/kya/g;s/キュ/kyu/g;s/キョ/kyo/g;s/ギャ/gya/g;s/ギュ/gyu/g;s/ギョ/gyo/g;s/シャ/sha/g;s/シュ/shu/g;s/ショ/sho/g;s/ジャ/ja/g;s/ジュ/ju/g;s/ジョ/jo/g;s/チャ/cha/g;s/チュ/chu/g;s/チョ/cho/g;s/ヂャ/ja/g;s/ヂュ/ju/g;s/ヂョ/jo/g;s/ニャ/nya/g;s/ニュ/nyu/g;s/ニョ/nyo/g;s/ヒャ/hya/g;s/ヒュ/hyu/g;s/ヒョ/hyo/g;s/ビャ/bya/g;s/ビュ/byu/g;s/ビョ/byo/g;s/ピャ/pya/g;s/ピュ/pyu/g;s/ピョ/pyo/g;s/ミャ/mya/g;s/ミュ/myu/g;s/ミョ/myo/g;s/リャ/rya/g;s/リュ/ryu/g;s/リョ/ryo/g;s/ファ/fa/g;s/フィ/fi/g;s/フェ/fe/g;s/フォ/fo/g;s/ティ/thi/g;s/ディ/dhi/g;s/ヴァ/va/g;s/ヴィ/vi/g;s/ヴ/vu/g;s/ヴェ/ve/g;s/ヴォ/vo/g;s/ア/a/g;s/イ/i/g;s/ウ/u/g;s/エ/e/g;s/オ/o/g;s/カ/ka/g;s/ガ/ga/g;s/キ/ki/g;s/ギ/gi/g;s/ク/ku/g;s/グ/gu/g;s/ケ/ke/g;s/ゲ/ge/g;s/コ/ko/g;s/ゴ/go/g;s/サ/sa/g;s/ザ/za/g;s/シ/shi/g;s/ジ/ji/g;s/ス/su/g;s/ズ/zu/g;s/セ/se/g;s/ゼ/ze/g;s/ソ/so/g;s/ゾ/zo/g;s/タ/ta/g;s/ダ/da/g;s/チ/chi/g;s/ヂ/ji/g;s/ツ/tsu/g;s/ヅ/zu/g;s/テ/te/g;s/デ/de/g;s/ト/to/g;s/ド/do/g;s/ナ/na/g;s/ニ/ni/g;s/ヌ/nu/g;s/ネ/ne/g;s/ノ/no/g;s/ハ/ha/g;s/バ/ba/g;s/パ/pa/g;s/ヒ/hi/g;s/ビ/bi/g;s/ピ/pi/g;s/フ/fu/g;s/ブ/bu/g;s/プ/pu/g;s/ヘ/he/g;s/ベ/be/g;s/ペ/pe/g;s/ホ/ho/g;s/ボ/bo/g;s/ポ/po/g;s/マ/ma/g;s/ミ/mi/g;s/ ム/mu/g;s/メ/me/g;s/モ/mo/g;s/ヤ/ya/g;s/ユ/yu/g;s/ヨ/yo/g;s/ラ/ra/g;s/リ/ri/g;s/ル/ru/g;s/レ/re/g;s/ロ/ro/g;s/ワ/wa/g;s/ヲ/wo/g;s/ン/n/g;s/ー/-/g"
以上、sed awkの小ネタでございました。
[amazonjs asin=”477417369X” locale=”JP” title=”AWK実践入門 (Software Design plus)”]