Namazu-devel-ja(旧)


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

インデクスの縮小化



高橋です。

前回寺西さんにご指摘いただいたところを参考に
NMZ.iを縮小する方法を考えてみました。

現在のNMZ.iの構造は、
[単語xのデータ量][Docid][score]...
となっていますが、以下のようにしてみました。
[単語xのデータのBERSIZEの超過分][Docid][score]...

非常にわかりずらいですね。
つまり、最初のデータは、DOCIDとスコアの、BER圧縮したbyteが
2以上の場合、インクリメントします。
例えば、[Docid][score]
        [127]  [20]    [128][10] [1][130]
の場合、128を超えるのは2つあるので、2が入ります。
もちろん、16384を超えると、+2になります。

ここで、単語xのデータのBERSIZEの超過分をextrabyte(x)とします。
それで、単語xのデータ量の求め方は、
NMZ.ii(x+1) - NMZ.ii(x) - extrabyte(x) - byte(extrabyte(x))
で求めます。
(BER圧縮を使うとほとんど1byte、1byteに一つの値が入ることが
多いのでbyte計算から読み込むデータ量を求められる)

NMZ.pについても同様にしました。

これにより、利点は、
1.データが圧縮!
2.NMZ.iから単語xのデータすべてを読まなくても、
必要データ量が求められる!

1.に関しては、約1.7MのNMZ.iが1Kほど縮小されました。
2.に関しては、hlist.cでのnmz_get_hlist()のトリックが
楽になっています。

改変したファイルを添付しますので、ご感想をよろしくお願いいたします。

ちなみに、変数のネームセンスがないため、不適当な名前を
つけているかもしれませんが、ご容赦ください。
むしろ良い案をいただけると助かります。
また、いっていることと違う、ここにバグがある等もありましたら
お教えください。

P.S.
このアルゴリズムを元に、更なる縮小化がぼんやりと頭にうかんでいます。
ですのでバシバシご意見をいただけるとうれしいです。


図書館情報大学4年
 高橋英幸<k176@xxxxxxxxxx>

Attachment: namazu_data.tar.gz
Description: application/gzip-compressed