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);