[Reference:<_A13@freyasx.ML_>]
Newsgroups: mail-lists.freyasx
[FreyaSX] Re: FreyaSXへのnear機能の追加のお願い
On 12/23/04(21:08) yasuhiko takahashi <renesas_RB2RIHP.ml@delegate.org> wrote
in <_A48@freyasx.ML_> (nntp://127.0.0.1:7119/mail-lists.freyasx/48):
|お世話になります。高橋と申します。
|
|「長い単語と複雑な検索式で一発で当てたい」私としましては、
|near( )やタグ文字がぜひとも使いたいのです。
|もともと位置情報を持っていてnグラムのフレイヤなら、ユーザー
|インターフェースを付けるのみの様にも思うのですが、
|そういった機能拡張をするような計画はないものでしょうか?
|
|ps. もちろん、near( )の位置指定は、単語数では無く文字数でも
|構いません!
これは、FreyaSXの比較的初期のころにちょっと試してみた、フレーズ検索での
ワイルドカード機能が近いと思います。
On 08/04/04(18:26) ysato@delegate (Yutaka Sato) wrote
in <_A13@freyasx.ML_> (mail-lists.freyasx/13):
|ワイルドカード機能を入れてみました。
|
|とりあえず、任意の一語を表すのに "*" を使う事にします。これにより、
| link:www.*.org
|とか、
| "もし * なら"
|みたいな感じで検索できます。
|
|実装は同封のパッチのようなものです。単に無条件に適合したものとして、
|次の語のマッチングに進むというだけです。
|ここで、0.98.0 でやった変更「語の出現位置をオリジナルのようにバイト
|オフセットでなく語の出現順番号で表すようにした」が生きました。
|オリジナルFreyaの場合にこれを実現するのは、ちょっと難しかったのでは
|と思います。
|
|「任意の長さの任意の語」を導入するのは少しだけ難しいとは思いますが、
|基本的には「次のワイルドカードでない語を検索して、その出現位置番号
|が前の語より大きい」かどうかを判定すればOKだと思います。
ここで「任意の長さ」をどう表すか(** とか?)、長さの上限をどう指定するか
(*N とか?)など、記法をどうするか迷ったまま、忘れてしまいました。
Retrieve.cc:Retriever::searchPhrase() や multiplyListGT() にそれを作り
かけた痕跡があったり、CHANGESファイルに、
>for variable length wild cards
>... pos_t<<8|(0xFF&offset) ... use as offset for next word for each pos_t
などとあるのを見ると、必ずしもインターフェイスだけの問題ではなかった
ように思います。
。。。
ああ思いだしました。つまり "word1 ** word2 word3" みたいな検索をした時、
まず word1 にヒットする出現位置情報のセットを作り、次に word2 にヒットした
出現位置情報のセットをそれに乗じる(出現位置が後ろのものだけ)、さらに
word3 について同じことを行う、となるわけですが、この時、最終的な検索結果
となる位置情報のセットは、word1 に当たるフレーズの先頭の情報を保持する
必要があり、一方順次ヒットした単語に関するセットを乗じていくためには最後に
ヒットした単語の位置情報を残しておく必要がある、セットは膨大になる場合が
あるのでコンパクトに表現しなければならないから、先頭語の出現位置 pos_t の
下位ビットを少しあけて最後の語へのオフセットに使えば良いのではないか、
というようなことでした。
。。。
最近はDeleGateのほうにかかりきりなのですが、いずれ一段落ついたら、
また FreyaSX の拡張で楽しめることを、自分としても楽しみにしています。
D G
┌─┐┬┌──┬┐ //\^^ ( - ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_< >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)
|