【perlメモ】KAKASIを使った文章のわかち書き
分かち書きというのは日本語の文章を英語のように語の区切りごとにスペースで区切る書き方です。プログラムでは文章の解析の前準備としてわかち書きを行うことが多いです。
わかち書きを行う方法にはいくつか有りますが、今回はKAKASIを使ったわかち書きを行ってみました。出来ればモジュール単体または、POPFileの様に内部パーサーのみで処理できるといいのですが、今回は外部プログラムのKAKASIとその橋渡しを行なうモジュール『Text::Kakasi』を使ってわかち書きを行ってみました。おいおいこの結果でベイズ理論を使ったカテゴリ予測を行なうモジュール『Algorithm::NaiveBayes』を使って文章のカテゴリ分けスパム判定を行ってみたいと思っています。
環境はWindows XP Home、perl 5.8.8(Active perl build 824 [287188])、KAKASI 2.3.4、Text::Kakasi 2.04
- WindowsにはActive perlがインストールされていることが前提。インストールしていない場合は、下記ページからダウンロードしてインストール。
Perl, Python and Tcl – Dynamic Language Experts | ActiveState
インストールについては下記のページなどを参照の事(少し古い)。
ActivePerlのインストール – KUMA TYPE
- KAKASI本体をインストールしていない場合は下記ページから、kakasi(kakasi-2.3.4.zip)をダウンロードして、展開後。kakasi-2.3.4フォルダの中にあるkakasiフォルダをC:ドライブ直下にコピーする。
Index of /win32
- モジュールText::Kakasiをインストールしていない場合はppmを使ってインストールする。
ppmの使い方は下記の記事を参照。
ActivePerlにGDをインストールする – KUMA TYPE
ここまでやったら準備は完了。
- サンプルプログラムリスト
●kakasi01a.pl(utf8)#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
use Encode qw/from_to decode_utf8 encode_utf8 encode decode/;
use Text::Kakasi;my $japanese_text=<<"EOF";
(クリックで元のサイズで表示) うちでは、メールの振り分けにPOPFileという自動メール振り分けソフトを使っています。無料のソフト(寄付歓迎)です。メールの振り分け方式はベイズ理論による振り分けです。つまり、最初は馬鹿だけどスパムメールを学習…
EOFchomp($japanese_text);
$japanese_text = encode(‘cp932’=>$japanese_text);
my $res = Text::Kakasi::getopt_argv(‘-w’);
my $str = Text::Kakasi::do_kakasi($japanese_text);print $str;
print "\n———–\n";my @a = split(/ /,$str);
my %ha =();
foreach my $key (@a){
next if(length($key) < 3);
$ha{"$key"}++;
}foreach my $key( sort { $ha{$b} <=> $ha{$a} } keys %ha){
my $len = length($key);
print "$key = $ha{$key} len=$len\n";
} - 実行結果。
最初に表示されるのがわかち書きされた結果。その下がわかち書きされた文を出現回数が多い順にソートして表示した結果。文字が1文字の物は省くようにしている。
フォーマットは[区切られた語] = [出現回数] len=[文字列長(byte)]>perl kakasi01a.pl
( クリック で 元の サイズ で 表示 ) うちでは 、 メール の 振り分け に POPFile
という 自動 メール 振り分け ソフト を 使って います 。 無料 の ソフト ( 寄付 歓
迎 ) です 。 メール の 振り分け 方式 は ベイズ 理論 による 振り分け です 。 つ
まり 、 最初 は 馬鹿 だけど スパムメール を 学習 …
———–
振り分け = 4 len=8
メール = 3 len=6
です = 2 len=4
ソフト = 2 len=6
自動 = 1 len=4
つまり = 1 len=6
学習 = 1 len=4
表示 = 1 len=4
馬鹿 = 1 len=4
最初 = 1 len=4
サイズ = 1 len=6
寄付 = 1 len=4
歓迎 = 1 len=4
います = 1 len=6
POPFile = 1 len=7
無料 = 1 len=4
使って = 1 len=6
だけど = 1 len=6
による = 1 len=6
うちでは = 1 len=8
クリック = 1 len=8
という = 1 len=6
理論 = 1 len=4
スパムメール = 1 len=12
ベイズ = 1 len=6
元の = 1 len=4
方式 = 1 len=4>
- KAKASI – 漢字→かな(ローマ字)変換プログラム
- Browse and search CPAN : Algorithm::NaiveBayes
- Browse and search CPAN : Text::Kakasi[http://cpan.uwinnipeg.ca/search?query=Text%3A%3AKakasi&mode=dist]http://cpan.uwinnipeg.ca/search?query=Text%3A%3AKakasi&mode=dist
- Perl, Python and Tcl – Dynamic Language Experts | ActiveState