namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: simple method to implement regexp search



Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:

>> % wdnmz NMZ.i > words
>> みたいな感じで登録単語の一覧表を作っておいて、これを grep するのは
>> どうでしょう。これだと十分な速度が出ますし、何より正規表現が使える
>
>これで十分な速度が出るようなマシンであれば、最初から binsearch とかは
>不要だった、つーことになりますね。うーむ。

うーん、最近のマシンは速いですからねえ…。でも、単純な検索は 0.1秒
でやってほしいけど、正規表現なら 2,3秒待ってもいいかな、という感じ
はしますよね。 binsearchはやっぱり必要でしょう。

全数を調べる方法に比べると古川さんの中間/後方一致検索の方が効率は
良いのですが、どうせある程度の時間がかかるならもう少し時間がかかっ
ても正規表現まで対応してしまった方が良いのではないかと思います。実
装としてもシンプルですし。


>わかち書きとの共存には、ちょっと工夫が要りそうです。

正規表現を検索式で指定する実装としては

*foo* & /^ba[rz]$/ & /^[斎斉]藤/

のようにして // ではさんだ部分だけ正規表現とみなすという感じが良い
のではないかと思いますが、 kakasi を通すとこれが

*foo* & /^ba[rz]$/ & /^[ 斎 斉 ] 藤 /

のように日本語の正規表現の中までわかち書きされてしまうのでちょっと
困ります。でもこれはなんとかなるでしょう。

で、せっかく正規表現の対応という大きな改造を施すならこの機会に今ま
で踏み切れなかった仕様の変更も一緒に行いたいと思います。

1. namazu のコマンドラインの引数の順序の変更
   現在の % namazu [index dir(s)] "key string" から
          % namazu "key string" [index dir(s)] のようにキーワードと
   インデックスの指定の順序を逆にしたい。

2. NMZ.f のフォーマット変更
   HTMLで保存するのをやめる。 Date/欠番情報の項目をつける。

3. NMZ.i にフィールド情報を含ませる (16bit = 最大16種類)  たとえば

     bit 0 -> Subject:
     bit 1 -> From:
     bit 2 -> To:
     bit 3 -> Message-Id:
     bit 4 -> Newsgroups:
     bit 5 -> Title:
     bit 6 -> Author:
     bit 7 -> URL:
     bit 8-15 -> (reserved)

   みたいな感じになるかな。 Subject: と Title:, From: と Author: 
   は同じでも良いかもしれない。要検討ですね。

また、どうせ正規表現のために単語の一覧表を作るなら NMZ.i, NMZ.ii 
についても設計し直したほうが良いような気がします。こちらはまだ考え
中です。うまくすればディスクアクセスの効率が上がると思います。フレー
ズ検索も念頭に入れてなんとか実現させたいと考えています。

# やる気のあるうちにまとめて片付けてしまおう :-)。

--
高林 哲 Satoru Takabayashi