日本語の自然言語処理には Perl も便利
小ネタ。Perl で日本語の簡単な処理をするやり方(こういうことが簡単にできるという例で、具体的なオプションの意味等は解説していない)。
コマンドラインでちゃちゃっと日本語の処理をしたい時、Perl はけっこう役に立つ。日本語の一文字を一文字として扱えるから。特に、コマンドラインやファイルのエンコーディングを UTF-8 で統一しておくといい。
例えば、ひらがなの単語リストを読み込んでカタカナにするには、次のようにすればいい(「ヴ」は扱い方によって変わるので省略)。
perl -CS -Mutf8 -ple 'tr/ぁ-ん/ァ-ン/' < in.txt > out.txt
カタカナの単語リストの最初の一文字を濁音から清音にしたいということがあるかもしれない。そういう時はこうする(「ヴ」については同上、半濁音の処理も略)。
perl -CS -Mutf8 -ple 's{^(.)}{my $t = $1; $t =~ tr/ガギグゲゴザジズゼゾダヂヅデドバビブベボ/カキクケコサシスセソタチツテトハヒフヘホ/; $t}e' < in.txt > out.txt
のようにする(「カキクケコ」は「カ-コ」のようには書けない。Unicode では(JISでもそうだが)並び順は「カガキギクグ...」のようになっている)。
単語リストから、漢字だけからなるものを抜き出したい場合。
perl -CS -Mutf8 -nle 'print if /^\p{Han}+$/' < in.txt > out.txt
カタカナだけの場合はこうなる。
perl -CS -Mutf8 -nle 'print if /^[\p{Katakana}ー]+$/' < in.txt > out.txt
「カタカナだけ」と思って処理をする時、実際は「ー」も含めたい場合が多い。
カタカナ表記を表音的なものにしたいということがあるかもしれない。そういう時、量が多くなければ「ウ段・オ段の次にウが来たら長音記号に置き換える」ということを一括でやった後で、カバーできない部分を手で直すというやり方をすることができる。その場合、置き換えは次のようになる。
perl -CS -Mutf8 -ple 's/([ウクスツヌフムユルグズヅブプュオコソトノホモヨロゴゾドボポョ])ウ/$1ー/g' < in.txt > out.txt
(「ヲ」は含めない)
文字列を反転させたい場合は次のように。
perl -CS -Mutf8 -nle 'print join("", reverse split//);' < in.txt > out.txt
"perl -CS -Mutf8" の部分はエイリアスか何かを作ってもいいかもしれない。また、Perl のコマンドラインオプションについては404 Blog Not Found:perl - ワンライナーの書き方入門が詳しい。