[Reference:<_A12@freyasx.ML_>]
Newsgroups: mail-lists.freyasx
[FreyaSX] なんちゃって機能拡張 -- ワイルドカード機能
0.98 では性能と拡張性の向上ということで大幅な改造を断行!したので
かなり疲れました。ちょっと骨休めという感じで、何か新しい機能でも
ちょろっとつけてみようかと思いまして、以前から欲しいと思っていた
ワイルドカード機能を入れてみました。
とりあえず、任意の一語を表すのに "*" を使う事にします。これにより、
link:www.*.org
とか、
"もし * なら"
みたいな感じで検索できます。
実装は同封のパッチのようなものです。単に無条件に適合したものとして、
次の語のマッチングに進むというだけです。
ここで、0.98.0 でやった変更「語の出現位置をオリジナルのようにバイト
オフセットでなく語の出現順番号で表すようにした」が生きました。
オリジナルFreyaの場合にこれを実現するのは、ちょっと難しかったのでは
と思います。
「任意の長さの任意の語」を導入するのは少しだけ難しいとは思いますが、
基本的には「次のワイルドカードでない語を検索して、その出現位置番号
が前の語より大きい」かどうかを判定すればOKだと思います。
D G
┌─┐┬┌──┬┐ //\^^ ( - ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_< >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)
*** ../../freyasx-0.98.1/freya/src/Retriever.cc Sun Aug 1 17:49:52 2004
--- Retriever.cc Wed Aug 4 18:07:19 2004
***************
*** 128,133 ****
--- 128,138 ----
int nkeys, int &resultLen, int isprefixsearch){
pos_t *list = NULL;
for(int k = 0; k < nkeys; k++){
+ if(strcmp(keys[k],"*") == 0){
+ // wild card
+ continue;
+ }
+
pos_t *tmplist;
int tmplistLen;
|