Article freyasx/10 of [1-110] on the server localhost:119
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[Reference:<_A9@freyasx.ML_>]
Newsgroups: mail-lists.freyasx

[FreyaSX] FreyaSX-0.97.1 リリース (テキストポインタの64bit化)
26 Jul 2004 09:11:07 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project


On 07/25/04(14:49) you ysato@delegate (Yutaka Sato) wrote
in <_A9@freyasx.ML_>
 | | |となると対処法としては、ポインタ長を長くしてオフセットを収めるか、
 | | |XMapを復活させるか?
 | |
 | |とりあえず、
 | |
 | |   テキストポインタ = {ドキュメント番号:20, 種別:4, 文字位置:8}
 | |
 | |に変更したら、フレーズ検索機能は復活しました。ただ、256バイト毎に文字位置
 | |の値が0に戻るので、このままでは、その境界にかかっているフレーズは見つから
 | |ないことになります。うーん、
 | |
 | |   テキストポインタ = {種別:5, 文字位置:27}
 | |
 | |みたいにして、ドキュメント番号はオリジナルに戻してXMapを2文検索、という
 | |あたりが落としどころでしょうかね。
 |
 |いやいや、これでは2分検索もできないし。考えが回ってますね。今日も暑いし。
 |結局ポインタを長くするか、あるいは、オリジナルに戻して XMap をちょっと
 |拡張するか?

単純にすっきり解決したいので、ポインタ(pos_t)を64ビットに拡幅して解決
しました。

   テキストポインタ = {ドキュメント番号:31, 種別:6, 文字位置:26}

このポインタは、同じ語の出現位置のリストの中で、前の値との差分をとって
圧縮されているのですが、この差分値が負になると(最上位ビットが立つと)
圧縮アルゴリズムが動かなくなるようなので、1ビット削って63ビットぶん
使用しています。

この問題はオリジナルFreyaでの32ビットの段階でも潜在的していたのですが、
オリジナルではポインタが全文書を通した文字位置だったので、決して差分が
負にならないという状態でした。
ところが、今回0.97.0 で LINK とか DIGEST とか の種別を増設して、しかも
(FDIF中で)それらの種別のテキストが、種別に割り振られた番号のとおりの順番
では現れないことがあるので、差分が負になることがあるのです。
実は、すでに any2fdif では、番号順なら TITLE の後、KEYWORD の前に
現れなければならない AUTHOR が、TEXT の処理の後(その過程でTEXTから抽出して)
書き込まれるという状況になっていました。これは0.96の段階では単に AUTHOR
として認識されず、0.97.0で負の差分が問題になって一度拡幅したのですが、
その時点では32ビットまでしか対応してなくて、今回0.97.1で64ビット化した
際に再び拡幅が必要になったのでした。結局前回と同様なのに、問題のありかが
わかるまでにかなり手間取りました。比較のために圧縮なしにする機能を入れて
あって、圧縮無しにすると動いたので圧縮に問題があることがわかったわけです。
といっても実は、最初圧縮無しの機能のほうは、別の問題があってやっぱり動か
なかったので、ここに問題があることがわからず、原因の特定が遅れてしまい
ました。

                   D G  
┌─┐┬┌──┬┐ //\^^ ( - ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_<   >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V