HyperEstraier + MeCab + perl バインディング
ウチの某案件で使うことになり
実際に触ってみました。
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&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&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
とりあえず動かす場合
- 適当なディレクトリを作ってstaticなコンテンツを置く
$ mkdir /tmp/contents
※ 自分は、mysql に入っているデータから 1レコード=1ファイルの tsv を作って置きました。
- ドキュメントルートにインデックスの作成
$ cd /var/www ( アタクシの環境の場合、/var/www ) $ sudo /usr/local/hyperestraier/bin/estcmd gather -il ja -sd /var/www/test_search /tmp/contents
$ 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>
- ブラウザからアクセス
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