Win32でLingua::JA::Summarizeを使う
サイボウズラボのOkuさんがLingua::JA::Summarizeというモジュールを公開されていたのでさっそくテスト。mecabが入っていない場合はhttp://mecab.sourceforge.jp/からバイナリ落としてくる(mecabコマンドのパスを通す)必要があるのと、Win環境にあわせた修正をいくつかしないと正常動作しませんが、いいですね、これ。
以下暫定的にあててみたパッチ。Win環境でもeuc辞書を使っている人はいるでしょうからこの辺はスイッチで調整できるといいのかなあと思いつつ。まだUnix環境でのテストはしてません。
--- Summarize.pm Wed Apr 26 17:28:27 2006 +++ Summarize.pm.win32 Wed Apr 26 17:31:38 2006 @@ -90,6 +90,7 @@ $text =~ s/。」/。」\n/g; # write text to temporary file my ($fh, $tempfile) = tmpnam(); + Jcode::convert(\$text,'sjis') if $^O =~ /MSWin/; print $fh $text; close $fh; @@ -98,10 +99,10 @@ my $def_cost = $self->default_cost; open($fh, '-|', $mecab . - " --node-format='%m\t%pn\t%pw\t%H\n'" . - " --unk-format='%m\t$def_cost\t$def_cost\tUnkType\n'" . - " --bos-format='\n'" . - " --eos-format='\n'" . + q{ --node-format=%m\t%pn\t%pw\t%H\n} . + q{ --unk-format=%m\t}.$def_cost.q{\t}.$def_cost.q{\tUnkType\n} . + q{ --bos-format=\n} . + q{ --eos-format=\n} . " $tempfile") || croak("failed to call mecab ($mecab): $!"); @@ -121,6 +122,7 @@ $longword->{count} = 0; }; while (my $line = <$fh>) { + Jcode::convert(\$line,'euc') if $^O =~ /MSWin/; chomp($line); if ($line =~ /\t/o) { my ($word, $pn, $pw, $H) = split(/\t/, $line, 4);