ximapdはやっぱり便利

投稿者 akira 2007-04-12 15:01:00 GMT

一時cyrus環境に戻しているのだけど、振り分けとかフィルタリングとかの面倒くささに直面してximapdはやっぱり便利だったなあとしみじみ思う。sieveとか、imapfilterとか、どうもね。MUAのルールなんかも大量になると管理が大変だし、複数の環境からアクセスするとなると使いにくい。

HyperEstraierのヒット数とauxminの設定

投稿者 akira 2006-12-06 15:00:00 GMT

久びさにbugs.debian.orgを見るとHyperEstraierベースの検索ができるようになったと書いてある。だが試してみるとうまくヒットしてくれない。調整中なのかな。

一方、自前のDebian BTS検索のほうではヒット数の表示がどうもあやしいことに気付いていたのだけど調べる時間もなく、あまり困ってもいなかったのでしばらく放置していた。具体的には、たとえば70件のうちの1〜10件を表示している状態で、3ページ目あたりにいくと検索結果がなくなってしまうというようなもの。 たしかMLで何か見たような気がするんだよなという感じでメールを検索すると以下が見付かった(引用元にリンクしておくけどsf.netなので文字化けしてしまっていて読めない)。

DesktopHEではJavaバインディングを使わせていただいていますが、「スコア順」で検索したときと、「日付順」で検索したときにヒット数が変わる場合があります。

[Email Archive: hyperestraier-users-ja (2006-04-27)より引用]

いろいろと試して、スコア順と日付順の結果が同じになるようにできました。

Condition.set_auxiliary(-1);

として、補助インデックスを使わないようにすると、スコア順でも日付順と同じだけの件数がヒットするようになりました。

●スコア順のとき 補助インデックスだけで検索

●日付順のとき 補助インデックスとインデックスで検索(結果をソートする必要があるため)

となって、ヒット数が異なるということでしょうか。

[Email Archive: hyperestraier-users-ja (2006-05-19)より引用]

自分でも忘れてましたが、ソート条件を指定した場合は補助インデックスが使われないのでした。2文字だと誤差が出るというのは、2-gramで補助インデックスを作っていたからのようですね。

[Email Archive: hyperestraier-users-ja (2006-05-19)より引用]

ソート順の指定によって状況が変わる可能性があることには気付いていなかった。さっそくこれをやってみたところ同じ現象らしいということが確認できた。

そういうわけでestseek.confでauxmin: 0としたところ、問題の現象が起きなくなった。で、詳しく追いかけていないのだけど、これっていうのはわかち書きが使えないHyperEstraierでインデックスを作っているとこうなる(可能性がある)っていうことでいいのかな? 後で確認してみたほうがよいかなあ。

追記(2007-10-27): 別のサービスで同じ現象が起きて、同じようにauxmin: 0としたのだが現象を回避できなかった。estseek.cgiのソースを見てみると、補助インデックスを使うかどうかはauxminの設定に必ず従うわけではないようだ。具体的にはperpageオプションの一つめの数値×1.3+1(x)よりもauxminが大きいときにだけ使われて、そうでなければ(x)で得られる値が使われる。上述のHyper Estraierのバージョンも今回のも同じ1.4.9だったはずなので、上述のHyper Estraierでも同じ状況になってしかるべきなんだが…… それとはともかくauxminの意味は「補助インデックスの結果を採用する最低の文書数」なので、これをあり得ないくらい大きな数値にしてみたところ、それらしく動くようになった。ちなみに補助インデックスが用いられた検索については「Search More Precisely」というボタンが表示されるので、これを使って再検索すると補助インデックスが使われない。というのは、つまり、QUERY_STRINGにprec=1を入れることで補助インデックスが使われなくなるということでもある。ただ、まあ、こういうケースでは補助インデックスを作らないようにするか、それともわかち書きできるようにするかのどちらかにしたほうが良いのかもしれない。

ximapd + Hyper Estraier 1.2.x

投稿者 akira 2006-05-28 15:00:00 GMT

ximapdのバックエンドにHyper Estraierを指定しているのだが、属性のいくつかにインデックスを付けたところ素晴らしい効果を得られた。ここのところ忍耐が一つのキーワードになっていたのだが、これによって普通に使えるレベルに持ち直した。メールの登録や移動は遅くなるのかなと思ったが、気になるほどではなかった。後で簡易の計測くらいはしてみようかなと考えているが、まあ、少し後で。

いろいろあって今のところ登録されているメール数がそれほど多くないため、今後どうなるかもう少し見ていきたい。

ximapd-0.1.0 1

投稿者 akira 2005-09-16 15:01:00 GMT

そんでもってximapdをバージョンアップ。~/.ximapdに少し記述を加えた程度で動作した。

どうも肝心なところで動けなくてごめんなさい > 前田さん

rast.deb 1

投稿者 akira 2005-09-16 15:00:00 GMT

rast-0.3.1がリリースされたということでhttp://www.netlab.jp/rast/deb/を見てみたけどまだdebはない様子。どっちにしろsid用しかないようなのでrast-0.3.0のパッケージをベースに0.3.1のパッケージを作った。

手元でざっくりと確認した範囲では以下の変更が必要だった:

  • debian/controlのBuild-Dependsにlibapr0-dev、libmagic-dev,、libxmlrpc-c3-dev、libmecab-devを追加(つまりこれらのパッケージが必要)。
  • debian/controlとdebian/rulesのmorq関係を削除(配布が別になった?)。
  • debian/patches/*を削除(見た感じ必要なくなったよう)。
  • sed -e 's/0\.3\.0/0.3.1/g' < rast-0.3.0.tar.bz2.cdbs-config_list > rast-0.3.1.tar.bz2.cdbs-config_list
  • debian/librast-ruby1.8.installの中の/i486/という決め打ち部分を/*/に変更(ま、ちょっといい加減だけど)。

こんなところでパッケージに含まれるファイルの内容は同じになった。lintianチェックとかはしていないしchrootでbuildとかもしてない。

追記(2005-09-19): あれ、もうインストールしちゃったんだけどRast 0.3.xは開発者向けだったんだ。まったく気付いてなかった。

Rabbitのdeb

投稿者 akira 2005-09-06 15:00:00 GMT

新しくパッケージをメンテナンスする余力がなさそうなので形だけなのだけどRabbitdebを作ってみた。とりあえずこんな状態:

  • dh_makeのサンプルはわざと残したまま。
  • RecommendsとSuggestsの境界はあてずっぽう。
  • Debian的都合に合わせてインストール先を一部いじった。
  • 同じくDebian的都合で不要と思われる#!行を削った。
  • rabbit rabbit.rdが動いってるっぽいことは確認したが、それ以上のことは確認していない。

誰かDebianに持ってきませんかね?

で、この作業をしているときに気付いたのだけどsetup.rb(バージョン3.3.1)の1138行目のFile.basename(config('rubypath')) == 'ruby'というチェックはどうして必要なんだったかな。Debianだとconfig('rubypath')/usr/bin/ruby1.8になるのでadjust_shebangが何もしてくれないみたい。

あと#!/usr/bin/evn ruby--shebang=allで書き換えてくれないんだっけ。この辺の挙動はバージョンによって違うんだったかな。どうだったかな。

ximapdのHyper Estraier対応について

投稿者 akira 2005-08-25 15:00:00 GMT

Journal InTimeから開発メモの記事:

Rastといえば、ximapdをHyper Estraier対応にする実験もやられているみたいだな。実用段階までいくかどうかはわからないけど、コスモポリタニズムというか、ルネサンス的というか、そういうノリは大好きだ。

でも所詮は「比較対象」として、つまり引きたて役の扱いなんだよなぁ。ぶっちゃけ何がいけないんだろう。Hyper Estraierのコンセプトが適合していないのか、設計や実装に気に入らない点があるのか、どこの馬の骨ともわからぬ奴が作っているから信用ならないのか、その全部なのか。ダメ出ししてくれる人ってなかなかいないからわからないんだよなぁ。

[開発メモより引用]

(コメントを入れようと思ったら対応する記事がないというエラーになってしまったので、ここで。)

ximapdのMLで「比較対象くらいには」と書い(てしまっ)たのはHyper Estraierに何か問題があるとかそういうことではなくて、私自身の都合(能力、時間、その他)によってどこまで実装を進められるか分からないのでというような意味合いでした。私自身は、うまく実装が進められたらちゃんと使ってみようと思いつつコードを書いています。もしも気を悪くされたようならごめんなさい。

gdestraier 2

投稿者 akira 2005-08-04 15:00:00 GMT

gdestraierとximapd + Hyperestraierを組み合わせるとSpotlightみたいなことができるようになるかな?

ximapd + Hyper Estraier

投稿者 akira 2005-08-03 15:00:00 GMT

Hyper EstraierのRubyバインディング(SWIGのほう)を使って(少し手を加えて)、ximapdのバックエンドとしてHyper Estraierを使うというのをやってみた。

tests/runner.rbの実行時間がけっこう違うのだけど、こんなものだろうか。何かすっとばしていないかドキドキする。ただ、まあ、精度に関するデフォルトの設定が違っていそうな感じなので、そのあたりが効いてきているのかもなとも思う。パラメータをいじってみたりしたほうが良さそうかな。

HyperEstraierのドキュメント属性をいじる 1

投稿者 akira 2005-08-01 15:01:00 GMT

HyperEstraierにはドキュメント属性をいじるAPIが用意されている。これを使うと本文は変更しないでよいが属性だけをいじりたいというようなことが素早くできるのではないかと思い、ちょっとだけ試してみる。

まず、hyper_estraier_wrappers-0.0.9に少し手を入れてest_db_edit_docを使えるようにする:

diff -ruN swig_hest-0.0.9.orig/HyperEstraierWrapper.cpp swig_hest-0.0.9/HyperEstraierWrapper.cpp
--- swig_hest-0.0.9.orig/HyperEstraierWrapper.cpp	2005-06-12 19:11:18.000000000 +0900
+++ swig_hest-0.0.9/HyperEstraierWrapper.cpp	2005-08-02 14:01:00.000000000 +0900
@@ -275,6 +275,12 @@
 			 */
 			return est_mtdb_put_doc(db, doc->doc, options);
 		}
+		bool edit_doc(Document *doc) {
+			/**
+			 * edit a document to a database
+			 */
+			return est_mtdb_edit_doc(db, doc->doc);
+		}
 		std::vector<int> * search(Condition * cond, int options) {
 			/**
 			 * search documents corresponding a condition for a database
diff -ruN swig_hest-0.0.9.orig/ruby/extconf.rb swig_hest-0.0.9/ruby/extconf.rb
--- swig_hest-0.0.9.orig/ruby/extconf.rb	2005-06-09 13:35:07.000000000 +0900
+++ swig_hest-0.0.9/ruby/extconf.rb	2005-08-02 14:31:02.000000000 +0900
@@ -5,11 +5,7 @@
 
 $srcdir = 'src'
 
-$libs += [
-			`estconfig --libs`.chomp,
-			`estconfig --mtlibs`.chomp,
-			'-lstdc++'].join(" ")
-
+pkg_config('qdbm')
 if have_header('estraier.h') and have_library('estraier', 'est_db_open')
 	create_makefile('HyperEstraier')
 end

Debian環境だと-Iを指定してやらなければならないので、ついでにextconf.rbにも手を加えておいた。この状態でrubyディレクトリに移動し、以下を実行する:

$ ruby extconf.rb --with-cflags=`estconfig --cflags` \
--with-ldflags="`estconfig --ldflags` `estconfig --libs` -lstdc++"
$ make

これで準備が出来たので、あらかじめ作っておいたインデックスを指定して次のように実行する:

$ ruby -r./HyperEstraier -e '
db = HyperEstraier::Database.new()
db.open("/path/to/index", HyperEstraier::Database::DBWRITER)
doc = db.get_doc(document-id, 0)
doc.add_attr("attribute-name", "varlue")
unless db.edit_doc(doc)
  HyperEstraier::Database::err_msg(db.error)
end
db.close'

検索してみると属性が変わっているのが確認できるはず。

で、まあ、こういったことがRastでもできると良いなあ、と。