Naoya Murakami
visio****@gmail*****
2013年 8月 13日 (火) 18:00:49 JST
お世話になっております。村上です。 度々の質問へのご回答ありがとうございます。 またまた、長文で大変恐縮ですが、ご確認よろしくお願いします。 1.トークンの位置情報が捨てられた場合の影響について >検討してみますが、それにあたってユースケースを教えてもらえな >いでしょうか?トークンの位置情報が捨てられたときに問題になる >のは、文書の後半にある内容をフレーズ検索したいときだけじゃな >いかと思っています。 カンマとかの単語を構成し得ないトークンであればフレーズ検索にしか 影響ないですが、かなり大きいサイズの日本語文書をバイグラムし、 後半のバイグラムトークンが抜けおちると、 後半部分のバイグラムトークンで構成され、且つ、文章中の後半にしか でてこない単語が検索できないケースがでてくると思われます。 たとえば、「アイス」という単語を検索したい場合を考えると、 文章の前半部分に、イスが131071回出現し、且つ、 この間、アイスが1回も出現せず、その後、文章の後半部分に 「アイス食いたい。」という文書がでてきた場合、「イス」が捨てられて この文章の部分のトークンは、「アイ」、「ス食」、「食い」になると 思われます。 この場合、「アイス」の単語を検索すると、検索トークンは、 「アイ」、「イス」になり、文章中に一回も出現せず一致しない んじゃないかなぁと考えました。 mecabや空白区切りでトークナイズすれば、たいして問題にならないかも しれませんが、バイグラムでトークナイズするの場合は、単語を構成しうる 部分が喪失することになるので、ありえない話じゃないんじゃないかなぁと 考えました。 まあ、このようなケースが発生するのは、相当稀でしょうし、実際に発生するのか どうかはわかりません。ただ、too may postings自体は結構な頻度で発生します。 2.インデックスされたトークンの出現回数の抽出について 実際に、カンマのほかにどういうトークンが捨てられるのかなぁと確認しようと、 rroongaのdump_indexでトークンの出現回数を調べようと思いましたが、 rubyの環境構築および利用に相当なれてなくて、ruby-1.93では、以下のチュートリアル にある、$KCODEが無視されてdumpできず、1.8,2.0系では、それ以外の部分で エラーになり諦めました。 http://ranguba.org/rroonga/ja/file.tutorial.html irb --simple-prompt -rubygems -rgroonga >> $KCODE = "UTF-8" (irb):1: warning: variable $KCODE is no longer effective; ignored >> Groonga::Database.open("/var/lib/mysql/mrn_storage.mrn").dump_index("dumplist") ArgumentError: invalid byte sequence in UTF-8 Q.トークンの種別は、groongaのテーブルを覗けば見れますが、出現回数までは、 rroongaのGroonga::dump_indexでindexをダンプするか同じことをAPIで つくらないとできないという認識でよろしいでしょうか? http://ranguba.org/rroonga/ja/Groonga/Database.html#dump_index-instance_method ログレベルの抽出は教えていただいた内容等で抽出して、監視できるようにしたいと思いますが、 ignore too long tokenと同様に、位置情報が捨てられるトークンが、warningメッセージで わかるとわかりやすいかもしれません。 3.補足 もちろん、有償のサポート契約を結んでいるわけでもなく、そこまでいろいろと細やかな 対応をお願いできないので、これらは、そうだったらいいなという願望なだけです。 これは、こちらの勝手な事情なので、聞きながしていただいてかまいませんが、 実は、今のテーブル構成では、フルテキストインデックスのみで、AND検索が できるように、カラムの最後に本文と区別されうる形式(ユニークなタグで囲んで) で多数の書誌情報等を追加しています。 この書誌情報のバイグラムトークンが捨てられる可能性があるというのは痛いなぁ と思ってます。 巨大なテーブルでできるだけ速度をだせるように、あとで思いついたので、 今は、書誌情報が最後にいますが、書誌情報のカラムを先頭に移すことで、 トークンが捨てられる不安からは解消できますので、どうしても、対応が難しい ようでしたら、こちらでテーブルを再構成します! (テーブルが非常に多く大変ですが。。。) 以上、よろしくお願いします。