Text::MeCab v0.10
いくつかパッチあてましたが、Segfaultを起こすこともなく無事動きました。牧さんありがとう!
とりあえずバグフィックスのパッチ。
--- MeCab.xs.org Fri Jul 14 13:31:28 2006 +++ MeCab.xs Fri Jul 14 13:32:12 2006 @@ -231,9 +231,8 @@ #endif len = av_len(args) + 1; #if MECAB_MAJOR_VERSION == 0 && MECAB_MINOR_VERSION < 92 - len++; - Newz(1234, argv, len, char *); - for(i = 1; i < len; i++) { + Newz(1234, argv, len + 1, char *); + for(i = 0; i < len; i++) { #else if (len > 0) Newz(1234, argv, len, char*);
もうひとつ、poor puppyのためのパッチ。
--- probe_mecab.pl.org Fri Jul 14 13:35:45 2006 +++ probe_mecab.pl Fri Jul 14 13:36:30 2006 @@ -28,13 +28,13 @@ chomp($version); die "no version specified! cowardly refusing to proceed." unless $version; - print "Additional compiler flags (e.g. -DWin32 -Ic:\\path\\to\\mecab)? [] "; + print "Additional compiler flags (e.g. -DWIN32 -Ic:\\path\\to\\mecab\\sdk)? [] "; if ($interactive) { $cflags = <STDIN>; chomp($cflags); } - print "Additional linker flags (e.g. -lc:\\path\\to\\mecab\\libmecab.lib? [] "; + print "Additional linker flags (e.g. -lc:\\path\\to\\mecab\\sdk\\libmecab.lib? [] "; if ($interactive) { $libs = <STDIN>; chomp($libs);
で、これはまあどうでもいいんですが、euc-jp辞書以外の辞書を使っているpoorest puppyのためのパッチ。
--- probe_mecab.pl.org Fri Jul 14 13:35:45 2006 +++ probe_mecab.pl Fri Jul 14 13:56:05 2006 @@ -6,6 +6,7 @@ use strict; use File::Spec; +use Encode; my $interactive = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; my($version, $cflags, $libs); @@ -91,5 +92,19 @@ } else { print "No linker flags specified\n"; } + +print "Encoding of your mecab dictionary? (shift_jis, euc-jp, utf8) [euc-jp] "; +my $encoding = <STDIN>; +$encoding ||= 'euc-jp'; + +my $test_strings =<<'EOT'; +太郎は次郎が持っている本を花子に渡した。 +すもももももももものうち。 +EOT +Encode::from_to($test_strings, 'euc-jp', $encoding); + +open my $fh, '>', 't/test_str.txt'; +print $fh $test_strings; +close $fh; return { cflags => $cflags, libs => $libs }; --- 02-basic.t.org Fri Jul 14 01:50:09 2006 +++ 02-basic.t Fri Jul 14 13:51:40 2006 @@ -7,6 +7,10 @@ use_ok("Text::MeCab"); } +open my $fh, '<', 't/test_str.txt'; +my @str = <$fh>; +close $fh; + my $mecab = Text::MeCab->new({ all_morphs => 1 }); ok($mecab); @@ -16,7 +20,7 @@ } for ( - my $node = $mecab->parse("太郎は次郎が持っている本を花子に渡した。"); + my $node = $mecab->parse($str[0]); $node; $node = $node->next ) { @@ -30,7 +34,7 @@ ok($mecab); for ( - my $node = $mecab->parse("太郎は次郎が持っている本を花子に渡した。"); + my $node = $mecab->parse($str[0]); $node; $node = $node->next ) { --- 04-dclone.t.org Fri Jul 14 01:50:09 2006 +++ 04-dclone.t Fri Jul 14 13:52:22 2006 @@ -7,12 +7,14 @@ use_ok("Text::MeCab"); } -my $text_A = "太郎は次郎が持っている本を花子に渡した。"; -my $text_B = "すもももももももものうち。"; +open my $fh, '<', 't/test_str.txt'; +my @str = <$fh>; +close $fh; + my $mecab = Text::MeCab->new; -my $node_A = $mecab->parse($text_A)->dclone; -my $node_B = $mecab->parse($text_B)->dclone; +my $node_A = $mecab->parse($str[0])->dclone; +my $node_B = $mecab->parse($str[1])->dclone; # XXX - better be at least 5 nodes after parsing (this may actually depend # on the dictionary that you are using, but heck, if you are crazy enough