Namazu-2.0.4
作成 : 2005/02/13
Namazu
日本語全文検索システム。 CGIにより、WEBサイトの全文検索ができる。 本家はhttp://www.namazu.org/。
nkfとperl-NKF
Fedora Core 3のRPMパッケージから、nkf(NKF本体)とperl-NKF(perlからNKFを利用するためのモジュール)をインストール可能。 nkfのソースはhttp://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/からダウンロードできる。
# rpm -ivh nkf-2.04-3.rpm # rpm -ivh perl-NKF-2.04-3.rpm
KakasiとText-Kakasi
Namazuで日本語を扱うには、KakasiまたはChaSenが必要。 Kakasiのほうが簡単で速いらしい。 両方インストールしておくとKakasiが優先され、インデックスを作成するときにどちらを使用するか選択して実行することもできる。
Fedora Core 3のRPMパッケージから、kakasi(Kakasi本体)とkakasi-dict(Kakasi辞書)perl-Text-Kakasi(perlからKakasiを利用するためのモジュール)をインストール可能。 kakasiのソースはhttp://kakasi.namazu.org/からダウンロードできる。 Text-Kakasiのソースはhttp://search.cpan.org/dist/Text-Kakasi/からダウンロードできる。
# rpm -ivh nkf-2.04-3.rpm # rpm -ivh perl-NKF-2.04-3.rpm
ChaSenとText-ChaSen
ChaSenはソースからコンパイル。
Darts
ChaSenをコンパイルするときに、Dartsが必要になる ソースはhttp://chasen.org/~taku/software/darts/からダウンロード。
# tar -zxvf darts-0.2.tar.gz # cd darts-0.2 # ./configure # make # make install <--- /usr/local/includeにdarts.hがインストールされる
注意! Dartsをインストールしておかないと、ChaSenをconfigureするときエラーになる。
Dartsがない場合、ChaSenのconfigureでエラー # ./configure ... checking for darts.h... configure: error: no header of Darts. You need to fetch Darts from http://cl.aist-nara.ac.jp/~taku-ku/software/darts/.
ChaSen
次にChaSen本体をインストールする。 ソースはhttp://chasen.naist.jp/hiki/ChaSen/からダウンロード。
# tar -zxvf chasen-2.3.3.tar.gz # cd chasen-2.3.3 # ./configure --with-darts=/usr/local/include <--- darts.hの場所を指定してconfigure
そのままmakeするとエラーになった。
そのままmake # make ... dartsdic.cpp: In function `int da_build_dump(da_build_t*, char*, FILE*)': dartsdic.cpp:180: error: ISO C++ forbids cast to non-reference type used as lvalue
GCC-3.4.0からキャストチェックが厳密になったためだそうです... lib/dartsdic.cppの180行目を修正して、再度make。
lib/dartsdic.cpp lens[size] = key.size(); // (const char*)keys[size] = key.data(); 削除 keys[size] = (char*)key.data(); //追加 vals[size] = redump_lex(lens[size], lex_indices, tmpfile, lexfile);
# make # make install <--- /usr/local/libにライブラリがインストールされる
/etc/ld.so.confファイルにライブラリの検索パスを設定し、ldconfigを実行する。
/etc/ld.so.conf /usr/local/lib <--- ChaSenライブラリをインストールしたディレクトリを追加
# ldconfig
注意! ライブラリの検索パスを設定しておかないと、後々mknmzを実行するときエラーになる。
mknmz実行時、ChaSenライブラリが見つからないエラー # mknmz -c --indexing-lang="ja_JP.eucJP" /var/www/html/ Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Text/ChaSen/ChaSen.so' for module Text::ChaSen: libchasen.so.0: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230. at /usr/local/bin/mknmz line 910
ipadic
次にipadic(ChaSen辞書)をインストールする。 ソースはhttp://chasen.naist.jp/hiki/ChaSen/(メニューの"茶筌の配布"あたり)からダウンロード。
# tar -zxvf ipadic-2.6.3.tar.gz # cd ipadic-2.6.3 # ./configure # make # make install
注意! ipadicをインストールしておかないと、後々mknmzを実行するときエラーになる。
mknmz実行時、設定ファイルchasenrcが見つからないエラー # mknmz -c --indexing-lang="ja_JP.eucJP" /var/www/html/ chasen: can't open .chasenrc, .jumanrc, or /usr/local/etc/chasenrc
Text-Chasen
最後にText-ChaSen(ChaSenをPerlから利用するためのモジュール)をインストールする。 ソースはhttp://www.daionet.gr.jp/~knok/chasen/からダウンロード。
# tar -zxvf Text-ChaSen-1.03.tar.gz # cd Text-ChaSen-1.03
READMEに書いてあるようにMakefile.PLを修正して、コンパイルする。
README
....
2. インストール
Text-ChaSen-1.01.tar.gzを展開し、作成されたディレクトリ
Text-ChaSen-1.01に移動します。
次にMakefile.PLを編集し、以下の内容が書かれている行を修正して、
libchasen.aの存在するディレクトリを指定します。
'LIBS' => ['-lchasen']
例: /usr/local/libにlibchasen.aがある場合
'LIBS' => ['-L/usr/local/lib -lchasen']
....
Makefile.PL use ExtUtils::MakeMaker; WriteMakefile( 'NAME' => 'Text::ChaSen', 'VERSION_FROM' => 'ChaSen.pm', 'LIBS' => ['-L/usr/local/lib -lchasen -lstdc++'] );
# perl Makefile.PL # make # make install
注意! Makefile.PLを修正してコンパイルしないと、後々mknmzを実行するときエラーになる。
Makefile.PLを修正しなかった場合のmknmz実行時エラー # mknmz -c --indexing-lang="ja_JP.eucJP" /var/www/html/ /usr/bin/perl: symbol lookup error: /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Text/ChaSen/ChaSen.so: undefined symbol: chasen_getopt_argv
注意! Makefile.PLの'LIBS'に"-lstdc++"を追加してコンパイルしないと、後々mknmzを実行するときエラーになる。
Makefile.PLの'LIBS'に"-lstdc++"を追加しなかった場合のmknmz実行時エラー # mknmz -c --indexing-lang="ja_JP.eucJP" /var/www/html/ Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Text/ChaSen/ChaSen.so' for module Text::ChaSen: /usr/local/lib/libchasen.so.0: undefined symbol: _ZSt4cerr at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230. at /usr/local/bin/mknmz line 910 Compilation failed in require at /usr/local/bin/mknmz line 910.
namazu
namazuのソースをhttp://www.namazu.org/からダウンロードして、コンパイル。 同梱のFile-MMagicもコンパイルする。
# tar -zxvf namazu-2.0.14.tar.gz # cd namazu-2.0.14 # cd File-MMagic # ./configure # perl Makefile.pl; make # make install # cd .. # ./configure # make # make install
namazu.cgiによるWEB全文検索
namazu.cgiを利用して、WEB全文検索をしてみる。
ディレクトリ構成 /var/www/ +- html/ <--- HTMLドキュメントルート | +- namazu/ | +- namazu.cgi <--- namazu.cgi | +- .namazurc <--- namazu.cgiの設定ファイル +- namazu/ <--- Namazuのインデックスとテンプレートを置くディレクトリ
インデックスの作成
mknmzでインデックスを作成する。 下の例では、/var/www/htmlディレクトリ以下のファイルを対象としたインデックスを作成する。 実行すると、/var/www/namazuディレクトリにインデックスとテンプレートができる。
# mknmz -c --index-lang="ja_JP.eucJP" -O /var/www/namazu /var/www/html -c : インデックスの作成に茶筌を使用 (-cをつけないとKakasiを使用する) -O : インデックスの作成先ディレクトリ --index-lang : 指定した言語で処理
namazu.cgiと設定ファイル
namazu.cgiを/var/www/html/namazuディレクトリにコピーする。 namazu.cgiのパーミッションは、"755"あたりで。 設定サンプルファイルnamazurc-sampleを、namazu.cgiと同じディレクトリに.namazurcという名前でコピーする。
# cp /usr/local/libexec/namazu.cgi /var/www/html/namazu/ # chmod 755 /var/www/html/namazu/namazu.cgi # cp /usr/local/etc/namazurc-sample /var/www/html/namazu/.namazurc
.namazurcをサイトに合わせて修正する。
.namazurc Index /var/www/namazu <--- インデックスのあるディレクトリ Template /var/www/namazu <--- テンプレートのあるディレクトリ Replace /var/www/html/ http://www.greensleeves.jp/ <--- ファイルシステムとURLの置換 Lang ja_JP.eucJP <--- 言語の設定
Apacheの設定(httpd.conf)
/var/www/html/namazuディレクトリでCGIを実行できるようにする。 いちおう、.namazurcファイルにアクセスできないようにする。
httpd.conf
<Directory "/var/www/html/namazu">
Options ExecCGI
<Files ~ "\.namazurc">
Order allow,deny
Deny from all
</Files>
</Directory>
httpd.confを修正したら、サービスを再起動すること。
# /etc/init.d/httpd restart
テスト : namazu.cgiの実行
namazu.cgiにアクセスして、下のようなページが表示されれば成功。
定期的にインデックスを更新(cron)
定期的にmknmzでインデックスを更新するよう、/etc/crontabファイルに記述する。/etc/cron.d/namazu_updateファイルを作成し、記述する。 下の例では、毎日2:00にインデックスを更新する。
/etc/cron.d/namazu_update
....
00 2 * * * root /usr/local/bin/mknmz -c --index-lang="ja_JP.eucJP" -O /var/www/namazu /var/www/html
namazu.cgiの表示をカスタマイズ(EUC-JP)
namazu.cgiの表示をカスタマイズしてみる。 簡単なものから順に...
テンプレートファイル(NMZ.*.ja)
mknmzでインデックスを作成すると、同じディレクトリにテンプレートも作成される。 これを修正することにより、namazu.cgiの表示をカスタマイズすることができる。
NMZ.head.ja <--- ヘッダ NMZ.body.ja <--- 検索式の説明 NMZ.foot.ja <--- フッタ NMZ.result.normal.ja <--- 通常の検索結果(サマリあり) NMZ.result.short.ja <--- 短い検索結果(サマリなし) NMZ.tips.ja <--- 結果が0件のとき表示される、Tips
これらのファイルは、削除してもmknmzを実行すると再生成されるようだ。 不要な場合は、中身を空にする。
/usr/local/share/locale/ja/LC_MESSAGES/namazu.mo
テンプレートでは、"検索結果"とか"検索式にマッチするxx個の文書が見つかりました。"とか"ペイジ"とかの表示を変更できない。 英語と日本語のメッセージを対応させるファイルnamazu.moで変更することができる。
namazu.moを直接編集してはいけない。 ソースを展開したディレクトリnamazu-2.0.4/po/ja.poを編集して、msgfmtで変換する。
# cd namazu-2.0.4/po ja.poを修正 # msgfmt -o namazu.mo ja.po # cp namazu.mo /usr/local/share/locale/ja/LC_MESSAGES/
namazu-2.0.4/src/output.c
最終手段は、ソースoutput.cを書き換えてnamazu.cgiをコンパイルし直す。 output.cは、namazu.moとの連携を考慮して修正しないと、日本語表示にならなくなる箇所があるので注意。 また、フォームのタグを修正するなら、form.cあたりも修正する。
# cd namazu-2.0.4/src *.cを修正 # cd .. # make clean # make # make install