Namazu に関するよくある質問、ありそうな質問とその答えをまと めた文書です。この文書は Namazu の古いヴァージョン (1.3.0.x) を対象としています。
日本語全文検索システムの構築と活用,
馬場肇著,
ソフトバンク刊, 2,800円 (税別)
が出版されました。買いませう :-)
Namazu はできるかぎりお手軽に使えることを目指しています。 技術的には決して高度なものではありませんが、 手軽に使えるという面では割といい線をいっていると思います。 ただし、別途 KAKASI/ChaSen とその辞書が必要なので使えるディスク容量に余裕がないと使えません。 メイリングリストを開設して比較的活発にメンテナンスが行われているのも特徴といえると思います。
Win32版に関する詳しい情報は広瀬さんによる 全文検索システム Namazu for Win32のページを参照してください。
OS/2版に関する詳しい情報は清水さんによる Kaz SHIMZ (SHIMIZU Kazuyoshi) presents "NetWarp World"のページを参照してください。
もしも古い Namazu をお使いならば最新のものを試してみてください。 この FAQもよく読んでみてください。既に解決しているかもしれません。 そうでなければ メイリングリストの方へご報告ください。
何か良いアイディアがあれば メイリングリストの方まで要望を提案してください。 有用なものであれば取り入れていきたいと思います。
問題ありません。どうぞご利用ください (Namazuの開発への援助は歓迎し ます)。ただし完全に無保証ですのでその点はご了承ください。Namazu の ライセンスは GNU General Public License version 2 に従うものとします。
フリーソフトウェアの文化に貢献したいと考えるからです。 ちなみに Namazu の開発環境は Plamo Linux + XFree86 + Mule + gcc + Perl + Apache と OS を含めすべてフリーソフトウェアで揃えられています。
特に意味はないです。思いつきで決めました。
質問する前にまずマニュアルとこの FAQ をしっかり読んでください。ど うしても分からないときは
% uname -a
と実行してみてください
% namazu -v
と実行してみてください
% perl -v
と実行してみてください
% gcc -v
と実行してみてください
% nkf -v
と実行してみてください% telnet localhost 80<改行>
HEAD / HTTP/1.0<改行>
<改行>
などについて簡潔な文章で書いてメイリングリ ストまで報告してください(投稿のマナーを参照のこと)。 ただし、質問しても必ず答えが返ってくるとは限らないのでご了承くださ い (答える義務はありません)。初心者の方 (UNIX, CGI などに) は 日本語全文検索システムの構築と活用(なまず本)を買って参考にする のがよろしいかと思います。
身近に詳しい人を見つけて教えてもらってください。あるいは書籍などで 自習してください。Namazu以前の初歩的な質問をメイリングリストに送ら れても困ります。
我々(?)はあなたのすぐ側には居ないわけですから、
「車のウインカーがつきません」
「ウインカーレバーを倒してみるのは?」
「ok, ウインカーつきました」
程度のアドバイスはできると思いますが、
「車のエンジンがかかりません」というのに対して、 「ではボンネットを開けて、向かって右の前から2番目にあるバッテリーの緑 のフタを外して赤いワイヤーを外して接点部の鉛の覆いを外して接点の銅に緑 青が吹いていたらそれをサンドペーパーでこすって磨いて接点復活剤をかけて また組み上げるのがまず1点。次に向かって左3番目の ECU を開けて CPU の (以下 120 行省略) 」 みたいな指摘は、超人かアポロ13号の地上指令室でもないかぎり、 残念ながらできません。
FreeBSD 2.x の /usr/bin/perl はヴァージョン 4 という古いもの
だったと思います。 mknmz の先頭の /usr/bin/perl
を書き替えて
v5.003 以降の Perl のパスを正しく指定してください。
KAKASI のドキュメントを読んでがんばってください。 または身近に詳しい人を見つけて教えてもらってください。
Windows 上でウィルスチェッカーを常駐させていると mknmz 実行 時に
Error! Runtime Exception
というメッセージが表示されることがあるそうです。その場合には ウィルスチェッカーを停めてから mknmz を再実行してください。
ChaSen v1.51 を用いてインデックスを作成 (mknmzを実行) すると、 特定のファイルで "Broken Pipe" といったメッセージが出力され、 終了してしまうことがあるようです。
これはおそらく ChaSen v1.51 のバグが原因です。chasen1.51-k1.diff のパッチをあてると直るようです。
できます。検索にロックがかかるのはほんの一瞬です。
よっぽどタイミングが悪くないかぎり、壊れません。ただし、 作 業ファイル NMZ.*.12345 (数字の部分は可変)、および (インデッ クスの2重更新を防ぐ) ロックファイル NMZ.lock2 が残ってしまい ます。削除してください。
Apache 1.3 以降であれば
<FilesMatch "^\.(htaccess|htpasswd|htgroup|namazurc)$"> order allow,deny deny from all </FilesMatch>
といった感じです。.namazurc だけなら
<Files .namazurc> order allow,deny deny from all </Files>
[namazu 550], SATOH Fumiyasu <fumiya@cij.co.jp> さんのメイ ルより引用。
『ウイルスチェッカが悪さをしている』 『レジストリのなかに "A:" を指すものがある』 とかいうのが良くある原因、と聞いたことがあります。
[namazu 508], Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp> さんのメイルより引 用。
なお、複数のディレクトリをインデックスしたいときは mknmz に -F オ プションを指定して
/home/hoge/foo/
/home/hoge/bar/
/home/hoge/baz/
のようなリストを渡して処理することができます (v1.3.0.0以降)。 / で 終わる行はそのディレクトリ内のファイルを再帰的に取得します。
URL を置換したい場合には
% mknmz -F list http://foo.bar.jp/ /home/hoge/
のように実行します (パス名の /home/hoge/ の部分を http://foo.bar.jp/ に置き換える)。
configure が 'Perl not found' などとエラーメッセージを残して異常終 了したときは、 configure がソフトウェアの自動検出に失敗したことを 意味します。 環境変数 $PATH にそのプログラム (この場合は perl) へ のパスが通っているか確認してください。
Apache なら srm.conf に
AddHandler cgi-script .cgi
の行を追加すると解決するかもしれません。
報告のあったもののなかでは 878,914 ファイル、合計 2,167,480,108 bytes の文書を対象にしたものが最大です (現在の世界記録保持者はすぎうらし ろうさんです :-)。
[Base] Date: Tue Aug 31 18:46:20 1999 Added Files: 878,914 files Total Files: 878,914 files Size: 2,167,480,108 bytes Added Keywords: 7,339,687 words Total Keywords: 7,339,687 words Wakati: module_kakasi -ieuc -oeuc -w ARGV: '-ahu' '-F' 'B' Perl Version: 5.00503 Namazu Version: 1.4.0.0-beta-8 System: freebsd Time: 79874 sec. NMZ.f 883950234 NMZ.fi 3515656 NMZ.i 721295588 NMZ.ii 29358748 NMZ.p 428365331 NMZ.pi 262144 NMZ.r 33406075 NMZ.t 3515656 NMZ.w 153384197
これより規模の大きいインデッ クスを作成された方はぜひご連絡ください。
SunOS 5.5.1, Perl 5.004_04 の環境でそのような報告がありました。 Perl を v5.005_02 にヴァージョンを上げたところ解決したそうです。が、 しかし、後日また再発したそうです。
結局、原因は単なるメモリ不足のようです。
NMZ.head.ja の
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
記述を消せば解決するようです。 なお、Namazu v1.3.0.0-beta-11 以降 では添付する NMZ.head.ja から <META HTTP-EQUIV...> を廃止し ました。代わりに HTTPのヘッダに
Content-type: text/html; charset=ISO-2022-JP
をつけています。
v1.3.0.0 では文書の更新を反映したインデックスのアップデートが可能 になっています。ゆえに
% mknmz /home/hoge/foo
% mknmz /home/hoge/bar
% mknmz /home/hoge/baz
のように数回に分けて異なるディレクトリのインデックスを作成すると、 2回目以降の処理時に mknmz は以前の文書を削除されたものと判断してし まいます。これが困る場合には 複数のディ レクトリをインデックスしたい を参照してください。
他の原因としては
といったものが考えられます。
Namazu v1.2.0.1 あたりで JPerl 5.004_04 を使っているとそういう現象 が起こります。新しい Namazu を使ってください。
Namazu は ./configure の実行時に nkf, kakasi (chasen) のパスを $PATH から検出します。あらかじめ nkf, kakasi (chasen) を $PATH の 通っているところにインストールしておいてください。
MSIE 4.01 for Macintosh は、GET メソッドで渡すとき、URL のエンコードが
一段多いようです。
本来、「テスト」は %1B%24B%25F%259%25H%1B%28B
とエン
コードされるべきところが、
%251B%2524B%2525F%25259%2525H%251B%2528B
のようになっ
てしまいます。v1.3.0.0 から user agent を確認して対応するようになっ
ています。
v1.2.0.8 以降では Win32, OS/2 ともに日本語のファイル名に対応しまて いるはずです。もし問題を見つけたら報告してください。
大きなファイルを処理していると Out of memory! になってしまうことがあります。
この場合は mknmz の中の $FILE_SIZE_LIMIT
の値を下げると解決すると思われます。
同じように、たくさんのファイルを処理していると同じように Out of memory! になってしまうかもしれません。
この場合は mknmz の中の $ON_MEMORY_MAX
の値を下げると解決すると思われます。
また、v1.2.0 からはフレーズ検索用のインデックスを作成するために以 前のヴァージョンよりもメモリを多く消費します。フレーズ検索が不要な 方は mknmz に -P オプションをつけて実行してください。
おそらくそれは CGI として実行されているのではなく、 namazu.cgi の中身がそのまま表示されているのでしょう。 CGI が実行できるようにサーヴァの設定をしてください。
これは正規表現で指定しています。 詳説 正規表現 などを参照してください。
SunOS4.x の memcmp(3) の実装により、 Perl で EUC の日本語文字列を比較する際に unsigned/signed の扱いで問題が発生していたようです。 この問題は最近の Perl では解決しているので、新しいもの (5.004 以降) を使ってください。 (一応 v1.1.1.3 以降の Namazu では対処するためのコードを入れ ていますが、信用しない方がよいです。 perlのヴァージョンを上 げましょう)
MHonArc の v2.1.0 より前のヴァージョンのものは自動判別がききません。 MHonArc のヴァージョンをあげることをお勧めします。
MHonArcのサイト
http://www.oac.uci.edu/indiv/ehood/mhonarc.html
Namazu はひとつのディレクトリにひとつだけしかインデックスを置けないという仕様になっています。 ですから、 NMZ.* の名前を変更してもあまりメリットはないと思われます。
備考: perl,kakasi,nkf はパッケージにあったものを使っています. 即ち,Linux 側の場合,Plamo-1.0 にあったそのまんまのモノを, Windows95 側の場合,広瀬さんのページにあったバイナリーそのまんまのモノ を使っています.実は,意外と,コンパイラの性能が速度要因の重要な因子に なるので,その点は注意が必要です (それで泣かされたことが何回あったか
mknmz実行時に
といったオプションをつけてください。サイズ、作成時間ともに半分 以下程度に短縮するものと思われます。
Namazuはインデックス作成時に、パス名に含まれる記号類を URL風に ' %xx' としてエンコードして記録します。ゆえにパス名に含まれる '%7Efoo' は '%257Efoo' のように '%' の部分が '%25' に変換され、嬉しくない結果となります。
このような場合は mknmz 実行時に -U オプションをつけてパス名のエン コードを行わないようにします。 '%7E' はそのまま '%7E' として記録さ れます。
これは Perl の出力するウォーニングです。特に実害はないと思います。 mknmz の一行目から '-w' を取り除くと消えるはずです。Perlのヴァージョ ンによってウォーニングが出たりでなかったりします。
nkf32と kakasi がパスの通ったところに置かれているか確認してください。
Word 98の文書なら MSWordView, wvWareで HTMLに変換して扱えるようです。変 換結果は UTF-8 のエンコーディングで出力されるそうなので lv, tcs などを用いるとよいでしょう。
辞書のメンテナンスが容易なこと、動作が軽いことを考えると KAKASI の方が扱いやすいように思われます。 もちろん本格的な日本語の処理を行うには ChaSen の方が向いています。
KAKASI付属の kakasidict (テキストファイル) に単語を追加して KAKASI の make 時に一緒に作られた mkkanwa というプログラムを使って バイナリ形式の辞書に変換します。 出来上がった辞書は kanwadict という名前で /usr/local/lib/kakasi あたりにコピーすればよいでしょう。
フリーのかな漢字変換用辞書については馬場肇@京大さんによる Freely available dictionaries for kana-kanji conversion に情報がまとまっています。
一時期、ドキュメントの中で (かな漢字変換用の) 「字書」という表記を使っていましたが、一般的な「辞書」に戻しました。 深い理由はないです。
MHonArc 2.2.0に眞柄さんが作成された日本語化パッチをあててください。
あるいは MHonArc 側で nkf を通す方法もありますが、上記の MHonArc の日本語化パッチを適用することをお勧めします。