namazu-ml(avocado)


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

Re: pnamazu-98.04.21



Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:

>perl 版検索クライアントを別便にて高林さんに送ります

<URL:http://saturn.aichi-u.ac.jp/%7Eccsatoru/Namazu/proto/pnamazu-98.04.21.tgz>

に置きました。


>今回は、
>
>    「2 byte 文字中間一致」の実験版です

素晴らしいです。さっそく試してみました。対象は Linux の JF のドキュ
メント 1,000 ファイル約 6MB をインデックスしたものです。

| [Base]
| Date: Tue Apr 21 01:12:32 1998
| Files: 1,079 files
| Size: 6,186,904 bytes
| Keywords: 82,346 words
| Wakati: /usr/local/bin/kakasi -ieuc -oeuc -Ea -w
| Time: 921 sec.

NMZ.m は 約600 KB になりました。

で、ちょっと細工をして実験してみたところ、

% perl namazu.pl "*大学" 

| 大 / l: 146863 r: 146974 (111)
| 学 / l: 138504 r: 138546 (42)
| [筑波大学]
| [京都大学]
| [千葉大学]
| [明治大学]
| [大学]
| [慶応大学]
| [同大学]
| [東京大学]
| [大阪大学]
| [神戸大学]
| [三重大学]
| [技術科学大学]
| [広島大学]
| 
| 参考ヒット数:  [ *大学: 22 ]
| ...

(参考ヒット数より上の部分は私が手を加えて表示させています)

というわけで、ちゃんと後方一致で検索できているようです。検索もほぼ
一瞬です。すごい! で、さらに

% perl namazu.pl "*ネット*" 

のように該当するものがかなり多い場合でも 4.5秒ほとで検索できました。

ただし、単語中に使われる文字の頻度によっては非常に時間のかかるもの
もあります。たとえばひらがなを除外しないでインデックスを作った場合
はひらがなの頻度が異常に高くなってしまいます。

% perl mbnmz.pl > mblog

として NMZ.mi? を作成したときのログを利用して

% nkf -e mblog |perl -ne 'next unless /^(..): (.*)/; \
	$n = tr/ / / -1; print "$n $1\n";' |sort -nr > mbstat

のように文字毎の頻度を調べると

% head mbstat
6200 い
4854 な
4802 で
4775 る
4623 と
4378 の
4311 し
4270 す
4131 て
4026 ま

という具合になります。この数字はちょっと苦しいものがありますね。古
川さんの最初の実装のように 2文字づつ記録する形ならこの点はもっと効
率的なんですが、記憶容量に限界があるし、とちょっと悩むところです。

あと、

% perl namazu.pl "*あいうえお"

のように実行したら

| あ / l: 3583 r: 5535 (1952)
| い / l: 5540 r: 11740 (6200)
| う / l: 11741 r: 14948 (3207)
| え / l: 14950 r: 15256 (306)
| お / l: 15256 r: 15989 (733)
| [このばあい]
| [のばあい]
| [あい]
| 検索結果
| 
| 参考ヒット数:  [ *あい: 4 ]  [ う: 56 ] 

のようにおかしな結果になりました。これは『あ』と『い』を通過して
『う』の時点で該当するものがなくなって、意図しない動作になってしまっ
たものと思われます。今日はもう眠いのでまた明日調べます。

--
高林 哲 Satoru Takabayashi
ゆで卵つき、いとしいウォルター