Namazu-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: フレーズ検索のHASH値への変換方法
寺西です。
Tadamasa Teranishi wrote:
>
> きちんと調べきれていないので誤解があるかもしれませんが、なんだか
> mknmz と namazu で処理が違うような気がしてきました。
>
> nmz/hlist.c の nmz_get_hlist() では、明確に 2 で割った値を使って
> います。そして、
> 文書ID の総数 + スコアの総数 = 文書の総数 * 2
> という前提で処理が書かれています。
と書きましたが、実は 文書ID の総数 + スコアの総数 = 文書の総数 * 2
として扱っている部分と、BER圧縮されたデータのバイト数 として扱って
いる部分が混在していました。
nmz_read_unpackw() の第3引数には、文書の総数 * 2 を渡しているにも
関わらず、これをバイト数だと解釈して、変換後の個数を戻値に
返します。
第3引数 に BER圧縮されたデータのバイト数 を渡せば、個数が変えるの
ですが、nmz_read_unpackw() の第2引数に渡すバッファのサイズは
個数 * sizeof(int) としています。仮に第3引数に BER圧縮されたデータの
バイト数を渡すのであれば、第2引数に渡すバッファのサイズは戻値の
個数 * sizeof(int) でないと、無駄にメモリを確保することになり、
nmz_read_unpackw() の仕様はかなり不自然な気がします。
やはり nmz_read_unpackw() にバグがあるだけで、第3引数には、
文書の総数 * 2 を渡すという仕様と考える方が自然です。
このバグのおかげで、namazu 自体は 文書の総数 * 2 として、プログラム
が書かれているのに関わらず、mknmz と同じ BER圧縮されたデータのバイト数
として処理されており、結局つじつまがあっていて問題が表面化
しなかったのではないかと思われます。
nmz_read_unpackw() 以外のところでは、文書の総数 * 2 として扱って
いますので、nmz_read_unpackw() を修正しようかとも思うのですが、
これを修正してしまうと、mknmz 側と矛盾が生じるかもしれません。
結構、やっかいな問題かもしれません。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E