Namazu-users-ja(旧)


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

フレーズ検索のHASH値への変換方法



小舞です。

部分一致のnmzrですが、かなり過激に、漢字については1文字以上でも
一致させるようにしてみました。

準N-gram的?なところまではいったのではないか?と思っています。
http://www.stellar.ac/~komai/software/namazu/research/nmzr/v0106/index.html

そこで、N-gram的な動作をさせるときに、考慮しないといけないのは、
フレイズ検索だと思って、NMZ.pのファイルの中身を見て、関連を調べています。
ところが、フレーズ検索のHASH値への変換についての説明書(仕様書)みたいなものを
過去のログを辿って探しています。。なかなかこれだ!というのが
見つかりません。。今のところ、HASH値の出し方がわからないため、文書IDとの
との関連が良く分からない状態なのです。

具体的には、
http://www.namazu.org/doc/nmz.html.ja
のハッシュ値そのものの数値の具体的な算出?方法?
のようなものがわかると嬉しいのですが。。
Perlが良く分かっていないため、もしかしたら、非常にトンチンカン
な質問をしているのかもしれません。。。


NMZ.p
解説
ー略ー

構造
    [ハッシュ値\x0000を含む文書数][ハッシュ値\x0000を含む文書ID]...
    [ハッシュ値\x0000を含む文書数][ハッシュ値\x0001を含む文書ID]...
    [ハッシュ値\x0000を含む文書数][ハッシュ値\xffffを含む文書ID]...
注意点
文書IDは小さい順に並ぶ --重要 
文書IDは差分だけを記録する。
例: 1, 5, 29, 34 -> 1, 4, 24, 5 
データはすべて pack 'w' で保存される (BER圧縮) 


=追伸=
これは、nmzrを作っていて思ったのですが、
NMZ.iのファイル仕様の
構造
    [単語1を含む文書の総数 * 2][文書ID][スコア][文書ID][スコア]...
    [単語2を含む文書の総数 * 2][文書ID][スコア][文書ID][スコア]...
    [単語3を含む文書の総数 * 2][文書ID][スコア][文書ID][スコア]...
の単語1を含む文書の総数×2というのは
単語1を含む文書IDの総数のBER数値のバイト数+単語1を含む文書のスコア値のBER数値のバイト数
のような気がしますが、如何でしょうか?
BER圧縮は可変長なので、かならず偶数にはならないと思うのです。。
これもはずしていたら、すみません。。。
(というか自分では勝手にそう思い込んで(^^;)、nmzrを作ってしまいましたが。。)