HyperEstraier + MeCab + perl バインディング

ウチの某案件で使うことになり

実際に触ってみました。

形態素解析MeCabを使います。

MeCabインストール

libiconv - 日本語パッチ
$ wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.12-ja-1.patch.gz

libiconv

$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
$ tar zxvf libiconv-1.12.tar.gz
$ cd libiconv-1.12
$ gzip -dc ../libiconv-1.12-ja-1.patch.gz | patch -p1
$ ./configure
$ make
$ sudo make install

QDBM

$ wget http://qdbm.sourceforge.net/qdbm-1.8.77.tar.gz
$ tar zxvf qdbm-1.8.77.tar.gz
$ cd qdbm-1.8.77
$ ./configure --enable-zlib
$ make
$ sudo make install
</code></pre>

MeCab

http://mecab.sourceforge.net/ から DL
$ wget --output-document=./mecab-0.97.tar.gz http://downloads.sourceforge.net/mecab/mecab-0.97.tar.gz?modtime=1202034262&amp;big_mirror=0
$ tar zxvf mecab-0.97.tar.gz
$ cd mecab-0.97
$ ./configure --enable-utf8-only --enable-mutex --prefix=/usr/local/mecab
$ make
$ sudo make install

mecab-ipadic

http://mecab.sourceforge.net/ から DL

$ wget --output-document=./mecab-ipadic-2.7.0-20070801.tar.gz http://downloads.sourceforge.net/mecab/mecab-ipadic-2.7.0-20070801.tar.gz?modtime=1185895550&amp;big_mirror=0
$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8 --with-mecab-config=/usr/local/mecab/bin/mecab-config
$ make
$ sudo make install

※ libiconv.so.2 がない!と怒られたときは、とりあえず
  /usr/local/mecab/lib 以下に、シンボリックリンクを張る

$ sudo ln -s /usr/local/lib/libiconv.so.2 ./libiconv.so.2
Hyper Estraier
$ wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.13.tar.gz
$ tar zxvf hyperestraier-1.4.13.tar.gz
$ cd hyperestraier-1.4.13
$ ./configure --prefix=/usr/local/hyperestraier\
 --includedir=/usr/local/mecab/include\
 --libdir=/usr/local/mecab/lib\
 --libexecdir=/usr/local/mecab/libexec\
 --enable-mecab\
 --enable-dlfilter\
 --enable-regex
$ make
$ sudo make install
とりあえず動かす場合
  1. 適当なディレクトリを作ってstaticなコンテンツを置く
$ mkdir /tmp/contents

※ 自分は、mysql に入っているデータから 1レコード=1ファイルの tsv を作って置きました。

  1. ドキュメントルートにインデックスの作成
$ cd /var/www ( アタクシの環境の場合、/var/www )
$ sudo /usr/local/hyperestraier/bin/estcmd gather -il ja -sd /var/www/test_search /tmp/contents
  1. apache のデフォルト cgi-bin ディレクトリに、cgiもろもろファイルをコピー
$ mkdir /usr/local/apache/cgi-bin/fts
$ cp /usr/local/mecab/libexec/estseek.cgi /usr/local/apache/cgi-bin/fts/
$ cp /usr/local/hyperestraier/share/hyperestraier/estseek.* /usr/local/apache/cgi-bin/fts/
$ vi /usr/local/apache/cgi-bin/fts/estseek.conf
以下の 2 点を変更
indexname: /var/www/test_search
replace: ^file:///home/nurai/test/full_text/contents/{{!}}http://localhost/</code></pre>
  1. ブラウザからアクセス
http://localhost/cgi-bin/fts/estseek.cgi
hyperestraier-1.4.13.tar.gz の解凍したディレクトリ以下の perlnative に移動
$ ./configure
$ make
$ make install
適当なクラスを作成(とりあえず、catalystで使ってみる)
package FTS::Controller::Search;

use strict;
use warnings;
use base qw'Catalyst::Controller';

use Estraier;
$Estraier::DEBUG = 1;

my $DB  = Database->new;
$DB->open('/var/www/test_search', Database::DBREADER);
my $COND = Condition->new;

sub index : Private {
    my $self = shift;
    my ($c)  = @_;
    if($c->req->param('keyword')){
        $COND->set_phrase($c->req->param('keyword'));
        my $result = $DB->search($COND);
        my $dnum = $result->doc_num();
        for my $i (0..$result->doc_num){
            next if $result->get_doc_id($i) < 0;
            my $doc  = $DB->get_doc($result->get_doc_id($i), 0);

            # ここで、適当に値を取り出して表示
            print $doc->attr('@uri'), "\n";
        }
        return;
    }

    # ここで、適当な入力ページを表示
    return;
}
1;
__END__

以上!


... と思ったら http://search.cpan.org/~takeru/Catalyst-Model-Estraier-0.0.5/lib/Catalyst/Model/Estraier.pm

があった。。。org