29 12 2006 Tweet
オモシロそうなので遊んでみたが、幾つかはまった部分があった(未解決)
[を] 裏で形態素解析器を使い長い文をそのままキーとしてWeb検索する
長い文を検索キーとしてWeb検索をするというハックです。 一年前の検索会議[2005-09-30-3]で紹介しましたが、 今回ゼロから書き直しました。
辞書はutf8な環境でつかえるように
./configure --with-charset=utf8
でインストール
自分の環境で実行すると、フォームの部分だけ文字化けした(謎)
あと、名詞かどうか判定している部分で
while ($n = $n->{next}) { if ($n->{feature} =~ /^\xcc\xbe\xbb\xec/) { # 名詞 my $w = $n->{surface}; Encode::from_to($w, 'euc-jp', 'utf-8'); $word{$w}++; } }
とやっているのだが、なぜ、xccxbexbbxecでマッチさせないといけないのかよくわかってない。というか、Encodingちゃんと理解してないナァ、、、、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/perl use strict; use warnings; use MeCab; use Devel::Peek; use utf8; my $m = new MeCab::Tagger (""); my $word = "今朝は雨の中、U隊長とユッキー様とハナタロウと散歩した。"; my $n = $m->parseToNode($word); while ($n = $n->{next}) { if ($n->{feature} =~ /^\345\220\215\350\251\236/) { # 名詞 # if ($n->{feature} =~ /^名詞/) { # 名詞 my $w = $n->{surface}; print $w,"\n"; } } |
この場合、use utf8しなければ、/^345220215350251236/でも/^名詞/でもマッチするのに、use utf8すると/^名詞/はマッチしなくなってしまう。
- フォームが文字化け
- 正規表現の部分がよくわからなかった。
あとで、ちゃんと調べる。