namazu 検索クライント perl 版 (pnamazu) 説明書

pnamazu-98.12.16 by furukawa@dkv.yamaha.co.jp


はじめに

Namazu ML に於いて、 「プロバイダにある自分のページに検索エンジンを載せたい」 との声がありました。perl 版は、それに応えるべく、作られたものです。

よって、本来は、プロバイダにて cgi として動作させることを主な目的としています。 (しかし、村下@池上通信機さんのご協力により、コマンドラインでも動くようになって きました。)

まず最初に、正規版の namazu のマニュアルを読んで下さい。 どっちみち、インデックスを作るためには読まなければならないでしょう。

perl 版の検索クライアントは、正規版の仕様に似せて作ってありますので、 多くの部分で正規版のマニュアルが通用します。 しかし、逆に言うと、似せてあるだけなので、細かい点では違いはあります。 それには、perl 版独自の改良もありますが、

さらには もあるでしょう。お気づきの点は、 Namazu ML へどうぞ。修正されるかもしれません(「仕様」と言い張るかもしれません)。


98.06.17 から 98.10.01 の版には、and 検索のバグ があることが分かりました。98.10.20 以降は直っています。


目次


perl 版について

perl 版は

「遅くてもいいから、なんとか動かしたい。動かすための敷居は低くしたい」
というポリシーで作られています。よって、正規の namazu の検索クライアント (C 言語版) に比べて、 といった利点があります、また、ディスク容量に制限があるプロバイダを考慮し、 をしています。(当然速度は遅くなります)

あたりまえですが、CGI が使えないプロバイダでは、やっぱり使えません。


とりあえず使うには

基本的には、次の手順でよいはずです。

  1. 検索インデックスを作る (正規版のマニュアルを見て下さい)
  2. pnamazu.cgi の 1 行目を、プロバイダの perl の位置に合わせて変更 する。普通は、
    #!/usr/bin/perl
    とか
    #!/usr/local/bin/perl
    になるはずです。利用するプロバイダから情報を得てください。 その際、perl のバージョンは 5 以上である必要があります。 (動作確認は 5.003, 5.004 にて行なっています)
  3. pnamazu.cgi の名前を namazu.cgi に変更する。
  4. NMZ.* および namazu.cgi をプロバイダに ftp で転送する (正規版のマニュアルを見て下さい)


ちょっと詳しい説明

とりあえず使うだけならば、上の手順 でいいはずですが、インデックスやスクリプトを圧縮したい場合や、設定を変更したい場合、以下を読んでください。

配付ファイル一覧

perl 版特有の設定

namazu.conf に無い設定や、perl 版特有の設定は、src/pconfig.pl というファイルで行ないます。

主な設定
$IntType

(プロバイダのマシンではなく) 検索インデックスを作ったマシンの整数タイプ。

(例)いわゆる普通の Windows マシンでインデックスを作った場合、 32bit の little endian なので 'V' を指定する
namazu 1.1.2 以降でインデックスを作った場合、'NMZ.le' または 'NMZ.be' というファイルが作られますから、それをプロバイダに転送すれば、 $IntType の設定は必要ありません。
配付時の初期設定:$IntType = '';

$Zcat

ディスク節約のために、インデックスやスクリプトを圧縮しておきたい場合、 実行時に解凍する必要がありますから、そのためのプログラムを設定します。

プロバイダのマシンでの zcat の位置を指定して下さい。 たいていの場合、

'/usr/bin/zcat'
とか
'/usr/local/bin/zcat'
といった場所にあります。 運よく、path の通った場所に あれば、単純に 'zcat' でもいい場合もあります。

注意すべき点として、例えば SunOS の /usr/ucb/zcat は、compress にしか対応していません。GNU の zcat である必要があります。 その意味では、gzip があれば、'gzip -dc' の方が分かりやすいかもしれません。 (普通は、gzip と GNU zcat の実体は同じものです)

配付時の初期設定:$Zcat = '/usr/local/bin/gzip -dc';
当然ですが、圧縮するために、ローカルマシンにも gzip が必要です。path の通ったところに置いて下さい。
$ZcatPri

インデックスを zcat で解凍する場合に、サーバに負荷がかかり過ぎるのを 防ぐため、優先度をこの値に下げます。

配付時の初期設定:$ZcatPri = 10;

$ScriptName

スクリプト自体を圧縮して実行する場合、$0 == '-' となるため、スクリプトが自分のファイル位置を知ることができなくなります。 その場合に設定して下さい。

Apache (全バージョンかどうかは知りませんが)では、環境変数 SCRIPT_FILENAME でスクリプトの位置が分かりますので、設定は不要です。

また、今のところ、この変数は、namazu.conf の位置を知るために使用しているだけなので、$NamazuConf に namazu.conf の位置を指定してあるか、または、namazu.conf を使わない場合、設定する必要はありません。

配付時の初期設定:$ScriptName = '';
$NamazuConf

namazu.conf の位置を明示したいときに設定します。

配付時の初期設定: $NamazuConf = '';
$ReniceTime, $RenicePri

検索のヒット数が多い、などの理由で、サーバに負担がかかるのを防ぐため、 一定時間が経過したら、setpriority で優先度を下げることができます。

$ReniceTime で、setpriority を実行するまでの時間、 $RenicePri で、setpriority で指定する優先度を指定します。 これらが、どちらも正の数で、かつ、CGI として実行しているときだけ有効です。

配付時の初期設定: $ReniceTime = 0; $RenicePri = 10;
$CmdLineArg

正規版の namazu 検索クライアントは、v1.2 から、コマンドライン実行時の 検索語とディレクトリの評価順が変わりました。それに合わせて、

'new' にすると、'key string' [index dir] の順、 'old' にすると、[index dir] 'key string' の順 に評価されます。

配付時の初期設定: $CmdLineArg = 'new';
$RemoteEnable

他のマシンへ検索結果を聞きに行く機能を有効にするかどうか。1 で有効。

配付時の初期設定: $RemoteEnable = 0;
%DbAlias

database の別名リストです。

%DbAlias = ('foo' => 'bar');
と書いておくと、dbname=foo というパラメータが渡されたときに、 bar というデータベースを見に行くようになります。

配付時の初期設定: %DbAlias = ();
@DbEnable

有効な database 名のリストです。 このリストが空でない場合、リストに無い database 名は無効になります。

配付時の初期設定: %DbEnable = ();
$RespTextOrig

応答の text に入れる検索式の初期値を設定します。 0 にすると、わかち書きなどの処理をした後の文字列を返します。 例えば、'*愛知大学*' を入力した場合、応答の text の初期値は '{ *愛知 大学* }' になります。これにより、検索クライアントが、 入力を、どう解釈したかが分かります。 1 にすると、入力をそのまま返します。

配付時の初期設定: $RespTextOrig = 0;
$SplitLink

1 にすると、文書の存在するディレクトリにもリンクするように なります。 ただし、この場合、<A HREF=&qt;foo/bar&qt;>hogehoge</A> のうち、hogehoge は捨てられます。NMZ.f を加工している場合には、 注意が必要です。

設定したら

src ディレクトリのファイルのうち、namazu.pl というファイルが main になります。これを namazu.cgi という名前に変更すれば、そのままで cgi として実行可能です。その際、require で呼ばれる全ファイルが必要です。 ftp でプロバイダに転送する際には、namazu.cgi と同じディレクトリに それらを全部転送して下さい。

makepnmz.pl について

ファイルの数が多いので、慣れないと、ftp の転送が面倒かもしれません。 (GUI な ftp クライアントを使っている人には関係無いでしょうが)

また、作者の個人的な趣味として、ソースを分割すると、開発には便利なのですが、 使うのにはちょっと面倒なのです。

そこで、makepnmz.pl というスクリプトを用意しました。

perl makepnmz.pl
とすれば、必要なファイルをマージして、pnamazu.cgi という一つのファイルを作ります。

ただマージするだけでは面白くないので、makepnmz.pl にはちょっと工夫があります。

perl makepnmz.pl [commands | PerlPath]
'/' で始まり、'perl' の文字列を含む引数は、プロバイダでの perl の位置と解釈されます。それ以外は command となります。command は複数指定可能で、その意味は次の通りです。
cgi
コマンドラインでしか使用しない部分はマージしない。 これにより、常に cgi として動作するようになります。
strip
コメントだけの行、行頭のスペースを削除、行のマージによりサイズを小さくする。
zcat
gzip で圧縮する。perl スクリプトは pnamazu.gz という名前に圧縮されます。 実行時に解凍して perl を起動するシェルスクリプトを生成します。 実行するには、'pnamazu.gz' も必要になります。

シェルスクリプトは、

#!/bin/sh
zcat pnamazu.gz | perl -
となりますが、このうち、perl の部分には引数の PerlPath (それが無ければ namazu.pl の一行目) が使われます。また、zcat には、pconfig.pl で指定した変数 '$Zcat' が使われます。

必要に応じて、$Zcat$ScriptName の設定をして下さい。

nobw
後方/中間一致検索 を使わない。その分、スクリプトは若干小さくなります。
注意:'nokt' というコマンドがあった時期がありますが、 「カタカナ語の中間一致検索」という仕様と共に廃止されました
noremote
リモート検索を使わない
noreg
正規表現検索を使わない
nofield
フィールド検索を使わない
配付ファイルの pnamazu.cgi は
perl makepmnz.pl cgi strip noremote noreg nofield /usr/local/bin/perl
として作成したものです。

注意:makepnmz.pl は、スクリプトを perl の文法的に解析しているわけではなく、 作者のプログラミングスタイルに依存しています。 よって、スクリプトを改造してお使いになる場合には、makepnmz.pl は使わず、 分割されたファイルのままの方が無難です。

ディスク容量を節約したい場合

実際問題としては、ディスク容量を節約したいのは、プロバイダのディスク容量の残りが少ない場合だと思いますが、そのような場合はコンテンツの大部分が画像等のバイナリファイル (つまり検索対象外のファイル) だとすると、この機能を使いたいケースはあまりないのかもしれません。それはともかく…

もし、御利用のプロバイダで gzip や GNU zcat が使えるならば、インデックスやスクリプトを圧縮した状態で置いておき、実行時に解凍することができます。

まず、pconfig.pl の$Zcatを設定して下さい。

インデックスを圧縮する

データベースファイルのうち、次の 5 つの拡張子のものは、圧縮ファイルを使用することができます。

    
非圧縮時 圧縮時 .h .h.gz または .hz .ii .ii.gz または .iiz .i .i.gz または .iz .fi .fi.gz または .fiz .f .f.gz または .fz

5 つ全部ではなく、一部だけを圧縮して置くことも可能です。 圧縮ファイルが無ければ、自動的に非圧縮ファイルを読みます。 ローカルマシンにて gzip を使って圧縮してください。

考慮すべきことは、

ということです。どのファイルを圧縮すべきか/すべきでないかは、個々のケースで違うと思います。

また、zcat を使って解凍することは、サーバに負荷をかけることになります。 プロバイダのサーバなど、多くの人の共有資源を使う場合には、この点も考慮 すべきです。pnamazu では、zcat を実行する際には、自分の優先度を下げる うにしています。

スクリプトを圧縮する

makepnmz.pl の zcat コマンドを使ってスクリプトを圧縮してください。cgi コマンドや strip コマンドと併用して、

perl makepmnz.pl zcat cgi strip /usr/local/bin/perl
などとすると、より効果的です。単純にマージしたときに比べると、1/5 程度になるようです。


コマンドラインで使う

perl 版はコマンドラインでも動くつもりで作られています。ただし、

コマンドラインで使う際の文字コード

スクリプトが自分自身で発生する文字列については、特に変換処理はしません。 よって、スクリプトを、御自分の環境のコードに応じて、Shift_JIS または EUC-JP に変換しておいて下さい。

一方、NMZ.* から発生する文字列については、環境変数 LANG, LC_TYPE を 読んで、指定されたコードに変換して出力します。そのルールはいいかげんで、


わかち書きについて

内蔵のわかち書き処理では、検索インデックス自身を辞書代わりに利用するため、 「文書群に存在する語群ときっかり同じ辞書を持った kakasi」 のような出力になります。つまり、本当に kakasi を呼び出した場合に比べると、辞書が小さくなったような動作になるので、やや精度が落ちます。

kakasi の標準の辞書に「大阪」「大学」「大阪大学」という語が有ります。

しかし、もし、語群に「大阪大学」が無く、「大阪」や「大学」があった場合、 検索インデックス (つまり内蔵わかち書き用の辞書) には「大阪」「大学」 はあるが、「大阪大学」は無い、という状態になります。

ここで、「大阪大学」を検索しようとすると、「大阪」と「大学」があれば、 ヒットすることになります。

もし正規の kakasi を呼び出していれば、「大阪大学」は、あくまでも「大阪大学」 であり、ヒットしない、という正しい結果になります。

ただし、これはヒットする文書が増える方向なので、実質的にはそれほど問題にはならないと思います。

内蔵わかち書き処理では、分けられた語をカッコで囲むようになっています。つまり、 「namazu ! { 愛知 大学 }」と扱われます。

注意: 以前は、namazu.conf で WAKATI を指定すれば、それを呼び出すように なっていましたが、現在は、常に内蔵のわかち書きを使います。

指定が無い場合、内蔵のわかち書き処理が実行されます。 プロバイダなどで kakasi が使えない場合、威力を発揮するでしょう。

(おまけ)wakati.pl について

おまけとして、わかち書きをおこなうスクリプトを添付しました。速度は遅いです。

始めに、わかち書き用辞書データベースを作ります。

perl wktndx.pl [options] dict
オプションは、次のものがあります。
-w DbName
データベースの名前を指定します。 このオプションが無いときは、'WKT' が指定されたと見なされ、 'WKT.d' および 'WKT.di' というファイルになります。 このオプションを、wakati.pl でも指定すれば、そのデータベースが使えます。
-h および -k
ひらがな (-h) やカタカナ (-k) で始まる単語もデータベースに登録します。 デフォルトでは、漢字で始まる単語しか登録しません。
辞書は複数指定可能です。いちおう、
/^よみ[a-z]?[,\s]*(\/?単語)+ 品詞情報/
という形式の辞書を読めるつもりで作っています。

そして、

perl wakati.pl filename

とか

perl wakati.pl < filename

などとすれば、わかち書き出力が得られます。

注意:wktndx.pl では、'NMZ.(be|le)' の存在をチェックして、データベースのエンディアンを決めています。 本来、NMZ.* のエンディアンとは関係なく決めてもいいのですが、もし、将来、本体に組み込んだ場合に、 NMZ.* に合わせていたほうが、サブルーチンの共用に都合がよいので、仮に、このようにしています。


後方/中間一致検索

perl 版では、後方一致検索や、中間一致検索ができるようになっています。

まず、mknmz で検索した後、

perl bwmnz.pl [Options] [DbName]
とします。DbName を省略すると、カレントディレクトリの NMZ.* が使われます。 これにより、次のようなファイルが作られます。
NMZ.s および NMZ.si
1 バイト文字列用、後方/中間一致検索データベース
NMZ.m および NMZ.mi
2 バイト文字列用、後方/中間一致検索データベース
オプションとして '-s' をつけると NMZ.s と NMZ.si だけを作り、 '-m' をつけると NMZ.m と NMZ.mi だけを作ります。 (以降、NMZ.s, NMZ.si, NMZ.m, NMZ.mi の 4 つを指して 'NMZ.(m|s)i?' と表記します)

これで準備完了です。

検索時に、次の条件を全て満たすと、後方/中間一致検索になります。

検索語の後に '*' をつけるかどうかで、後方一致か中間一致かが決まります。 '*後方一致''*中間一致*' のようになります。

1 バイト文字列の検索には、2 文字以上必要です。よって、 '*e*''*i' のような検索はできません。

後方/中間一致検索データベースは、NMZ.h などと同様、gzip で 圧縮 しておくこともできます。

また、NMZ.(m|s)i? でなく、NMZ.w でも、後方/中間一致検索ができるようになっています。

注意:「カタカナ語のみ中間一致検索可能」 という仕様であった時期がありますが、 その仕様は廃止されました。よって、NMZ.k や NMZ.ki というデータベースは、使いみちがなくなりました。削除してしまいましょう。

正規表現検索

検索文字列を '/正規表現/' のように、'/' ではさむと、正規表現による検索が可能です。(NMZ.w が必要です)

2 バイト文字列については、ちょっと細工をしています。perl の正規表現では、 '/[ア-オ]/' とやっても、 '/[\xa5\xa2-\xa5\xaa]/' と解釈されてしまうため、これを '/(\xa5[\xa2-\xaa])/' と変換するような細工をしています。従って、カッコの順番が変わってしまうため、 \1 のような表現は、使えません。

正規表現検索部分には、内蔵わかち書き処理は適用されません。 よって、'/知大/' で「愛知」「大学」への分割はできません。 後方/中間一致検索を使って、'*知大*' とすれば可能です。

NMZ.w と NMZ.(m|s)i? について

後方/中間一致検索のためのデータベースとして、 NMZ.w を使う方法と、NMZ.(m|s)i? を使う方法がありますが、

ですので、両方あった方が、よいです。


フレーズ検索

検索語列を '{ 検索語列 }' や '" 検索語列 "' のように '{ }' や '"' で囲むと、 フレーズ検索が可能です。この検索のためには、インデックス作成に namazu 1.2.x 以上を使って、フレーズデータベース NMZ.p および NMZ.pi を作ることが必要です。 もし、これらのファイルが無い場合には、単なる and 検索として処理されます。

{ 制御 ( システム | system ) } { *学部 *学科 } { /(バ|ヴァ)イオリン/ 協奏曲 } といった検索もできます。

もう少し詳しく説明すると、演算子が無い検索語の並びは、通常は and 演算ですが、すぐ外のカッコが '{ }' だった場合には、phrase 演算として扱われる、という仕様になっています。


複数データベース対応について

pnamazu-98.07.30 からは、CGI として動作する際に、複数のデータベースが 使えるようになりました。

作者は、検索結果のソートには「新しい順」をよく使うのですが、 初期の Namazu では、この機能は、ファイル名を数値ソートすることで実現されており、 データベースにはファイルのタイムスタンプが記録されていないので、 複数のデータベースでは、うまく働きませんでした。

そこで、正規版でサポートされるまでの「つなぎ仕様」として、タイムスタンプ だけを記録したファイルを作成することにより、時間によるソートができる、 というものを、作りました。

データベースのあるディレクトリで

perl tmmnz.pl
を実行すると、'NMZ.t' というファイルができます。'earlier' または 'later' を指定した検索時に、'NMZ.t' があると、このファイルを使って時間ソートを 行ないます。

この機能は、正規版でサポートされるまでの、限定仕様のつもりでしたが、 現在では正規版も同じ仕様を採用しています。


(実験仕様)リモートデータベース対応について

データベースの名前として、http:// で始まるものを使うと、そこへ検索結果を 聞きに行くようにしてみました。

例えば、QUERY_STRING に

dbname=hogehoge&dbname=http://www.xxx.yyy/zzz/namazu.cgi
と書いてあると、自分のところの hogehoge を探すと共に、www.xxx.yyy にアクセスし、その結果を併記します。その際、dbname 以外のパラメータ は、そのままリモートに渡します。

この機能は、セキュリティ上の問題があります。もし、外部には公開していない (が、この cgi を動かしているマシンからは見える) 検索サーバがあり、 その url を知られてしまった場合、その url を dbname に書かれてしまうと、 公開していない情報が外に出てしまうことになります。

よって、初期状態では、pconfig.pl の中で、$RemoteEnable = 0; つまり無効としています。この変数を 1 にする際には、上の問題点をご理解下さい。

リモート機能をちょっとだけ安全に使うために、pconfig.pl の中に、 @DbEnable および %DbAlias というものを用意しました。

@DbEnable を設定すると、そのリストにあるデータベース以外は無効になるので、 任意のサーバにアクセスされることを防げます。 また、%DbAlias を設定することで、リモートの url を隠すことができます。

例として、hogehoge および、http://www.xxx.yyy/zzz/namazu.cgi だけが検索対象で、他のマシンへアクセスさせたくない、また、リモートの url を隠したい、という場合には、pconfig.pl に

%DbAlias = ('foo' => 'http://www.xxx.yyy/zzz/namazu.cgi');
@DbEnable = ('hogehoge', 'foo');
とし、QUERY_STRING にて
dbname=hogehoge&dbname=foo
としてください。

注意:この機能は、実験仕様です。

(おまけ)データベース <-> テキスト双方向変換サブルーチン群について

データベースはバイナリファイルなので、下手にいじると、位置が変わって、 おかしなことになります。

よって、ユーザがデータベースを加工したいと思っても、簡単にはできません。 もしやるとしても、いちいち専用のツールを作っていると大変なので、

(1)
まずテキストに変換して
(2)
それを加工して
(3)
データベースを構築し直す
という手順を踏むことにして、(1) と (3) が用意されていれば、(2) は、利用 者が勝手に作ることができるようになります。

そこで、データベースをテキストと双方向変換するサブルーチン群 nmztxt.pl というものを作ってみました。サポートしているのは、

などです。

また、これを使ったサンプルとして、NMZ.f の要約に、Keyword を付加する、 kwnmz.pl というものを作ってみました。

本当は、データベースを読みながら処理をして、 その場で書き出した方が速いのですが、汎用性を考えて、 いったんテキストに落とすようになっています。 速度と汎用性を両立できる、もう少しいい方法があれば、考えたいと思います。

注意: これを使ってみよう、という奇特な方へ!

まだ作ったばかりで、実績が十分とは言えませんし、バグがあると、 データベースが壊れてしまう、危険な処理ですから、 バックアップをとってから使うことをお勧めします。


and 検索のバグについて

98.06.17 から 98.10.01 の版には、

foo and bar
foo & bar
の形の and 検索ができない、 というバグがありました。
foo bar
という、羅列形式の and 検索や、 他の演算子は正常に動作しています。

というわけで、これらをお使いの方には、新しいものに交換することをお勧めしま すが、何らかの事情で、それができない場合には、 operate.pl の中の、

if ($b eq 'and'){
というところ (全ソース中でも、一ヶ所だけです) を
if ($& eq 'and'){
にするか、またはスクリプトの先頭で
$ENV{'QUERY_STRING'} =~ s/\+(and|&)\+/\+/g;
としてください。


履歴

#       '+': 新規仕様
#       '?': 試験的仕様
#       '-': 仕様の削除
#       '*': 本体以外の仕様
#       '!': 修正
# 98.12.16
#   ! 一度に 2byte 文字列の正規表現検索を 2 つ以上しようとすると、
#     2 つ目以降が見つからないバグを修正
#   * nmztxt.pl が異様にメモリを喰うのを修正
#   * nmztxt.pl が、NMZ.field.* を .BAK, .BAK.BAK … と増殖させてしまう
#     不具合を、塩崎@ascii さんのパッチによって修正
#   * kwnmz.pl で、キーワードを EUC でセーブしていたのを修正
# 98.11.20
#   ! and 検索ができないケースがあった
#   * nmztxt.pl を使う際、他にも db.pl などを require しなければならなかった
#     のを改め、nmztxt.pl だけ require すればよいようにした。
#   * gcnmz.pl は、本家の src/ に昇格することになった。
#   * nmztxt.pl を使ったサンプルとして、gcnmz.pl に代わり、
#     要約にキーワードを追加するスクリプト kwnmz.pl を添付
#   + subquery 対応
#   + 森本@イマジカさんのパッチをもとに、文書の存在するディレクトリ
#     へもリンクできるようにした
#   ! 村下@池上通信機さんのパッチをもとに、LANGUAGE 関連の設定を
#     v1.3.0.0 的にした
#   + [1][2]... の前後に [prev] [next] のリンクをつけた
# 98.10.01
#   + field 検索に対応
#   * データベースファイルを、テキストファイルと相互変換する
#     サブルーチン群 nmztxt.pl を作った
#   * nmztxt.pl を使ったサンプルとして、データベースのゴミ掃除をする
#     スクリプト gcnmz.pl を添付 (v1.3.* 以降用)
#   + 正規表現の変換処理を、かなりマシにした
#   - 正規表現検索に NMZ.(m|s)i? を使うのをやめた
#   + NMZ.w が無くても、正規表現/後方/中間一致検索ができるようになった
#     (NMZ.i, NMZ.ii を使う -> ただし、遅い)
#   ! 環境変数 NAMAZUCONF & NAMAZUCONFPATH を読んでいなかったのを修正
#   + POST Method でも検索できるようにした
#   ! 初期状態でリモートアクセスを無効にしたつもりが、なっていなかった。
#     ($RemoteEnable という変数は用意していたが、用意しただけだった)
#   - kakasi を呼ぶのをやめた (常に内蔵のわかち書きを使う)
# 98.08.31
#   + NMZ.w を使っても、後方/中間一致検索ができるようになった
#   ? dbname=http:// とすると、他の host へ検索結果を聞きに行くようにした
# 98.07.30
#   + 複数の dbname に対応
#   + タイムスタンプを記録した 'NMZ.t' というファイルがあれば、
#     本当の時間ソートができるようにした。
#   * そのためのデータベース作成スクリプト 'tmnmz.pl' 添付
# 98.06.23
#   ! 正規表現検索を同時に 2 つ以上したときの、参考ヒット数が間違って
#     いたのを修正。
#   ! 正規表現検索が、ちょっとだけ高速になったかも
#   + .ja や .en といった言語指定 suffix のついたファイルを読むようにした
#   ! コマンドラインでの引数を v1.2 以降の順序で読めるようにした。
# 98.06.17
#   * wakati.pl < filename ができなかったのを修正
#   + 村下@池上通信機さんのパッチをもとに、LANGUAGE および veryshort
#     に対応
#   ? 正規表現に対応した。
#       2 バイト文字列はコンバートする
#       NMZ.w があれば、それを使う
#   + フレーズ検索対応
# 98.05.14
#   * サブルーチンを流用して、わかち書きスクリプト (wakati.pl) および、
#     そのためのデータベース作成スクリプト (wktndx.pl) を作った
#   ! wsearch.pl の中で unsignedcmp を使っていたが、ここでの比較は、
#     1 バイト文字同士または 2 バイト文字同士だから、実は単純な cmp
#     でよいのではないか、と思い、unsignedcmp を使わないようにした
#     これで問題なければ、ちょっと速くなるかも
# 98.05.06
#   ! 圧縮したデータベースが読めなくなっていたのを修正
#   - カタカナ語の中間一致検索を廃止
#   + 1 バイト文字列の後方/中間一致検索ができるようにした
#   * 中間一致検索用データベース作成スクリプトを統一 (bwnmz.pl)
# 98.04.27 (proto)
#   + 前方/中間/後方一致の展開結果を表示するようにした。
#   ! バグ修正
#   ? 一定時間経過したら、renice で priority を下げられるようにしてみた
#   * NMZ.m の効率を少し上げた (mbnmz.pl)
#   ! 細かい改良
# 98.04.21 (proto)
#   ? 2 バイト文字列の後方/中間一致検索ができるようにした
#   * そのためのデータベース作成スクリプト 'mbnmz.pl' 添付
# 98.04.17
#   ! 検索結果が 0 件でも 1 件と表示されていたのを修正
# 98.04.16
#   ! 前方一致検索ができなくなっていたのを修正
#   ! 単語分解がうまくいかないケースがあったのを修正
#   ? ひらがな語の扱いを見直し
#   ? カタカナ語に限り、中間一致検索ができるようにした
#   * そのためのデータベース作成スクリプト 'ktnmz.pl' 添付
# 98.04.09
#   + NMZ.(be|le) に対応した。
#   * それによって普通に使う分には設定を変更する必要は無くなったこと
#     に伴い、配付ディレクトリ構造などを見直し
#   ! ちょっとバグ修正
#   * 大幅にドキュメント充実
#   + NMZ.slog を残すようにした
# 98.03.25
#   + 村下@池上通信機さんのパッチをもとに、コマンドライン
#     から使えるようにした
#   ? namazu.conf で指定されていれば kakasi を呼べるようにしてみた
#   ? ソースを分割した
#   * マージツール (makepnmz.pl) を作成
# 98.03.16
#   + 検索式が使えるようになった
#   + 圧縮したデータベースが使えるようになった
#   ! 全体的にコード見直し
# 98.03.06
#   + 要約表示の ON/OFF を切り換えられるようにした
#   + NMZ.lock を見るようにした。
#   ! 前方一致検索のバグを直した
#   ! 大文字小文字が区別されていたのを直した
#   ! 複合語処理は日本語のみに適用するようにした
#   ! 整数のタイプを変数にした
#   ! その他、細かいバグ修正
#   + 村下@池上通信機さんのパッチをもとに、表示件数指定
#     および dbname 指定をできるようにした。
# 98.03.04
#   + 初版

その他

配付条件などは、基本的に正規版 namazu と同じとします。 無保証ですので at your own risk にて使って下さい。 改造などしていただくことは構いません というより、改造しやすいように作ろうと思っていたのですが、 結果的には非常に読みにくいスクリプトになってしまいました。 すみません。 有用な改造は取り込みたいと思いますので、お知らせ下さい。

作者は、プロバイダを使ったことがありません。なので、

などといったところの現実を、実はよく知りません。よって、作った機能が、

多くの環境で動いて欲しい、とは思ってはいますが、 実際に多くの環境でテストしたわけではありません。 また、この説明書も、分かりにくかったり、 環境によっては違う手順が必要だったりするかもしれません。 今後は、文書の充実も、やっていきたいと思っています。