[Senna-dev 711] 類似文書検索

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2007年 10月 29日 (月) 17:55:33 JST


幸坂です。こんにちは。

類似文書検索について、正常に検索できない問題がありましたので、
報告させて頂きます。

Senna1.0.9
MeCabを利用したインデックスを構築。
レコードは「豪雨」のみ。

パターン1) 「*S1 "豪雨です"」   ->  ヒット
パターン2) 「*S1 "今日は豪雨です"」   ->  ヒットせず (おかしい)

内部を見てみると、パターン1の場合は、
「豪雨」「です」
と分割して、それぞれの単語がインデックスに存在するかチェックしています。

しかし、パターン2の場合は、
「今日」「は」「豪雨」「です」
と分割して、「今日」がインデックスに存在するかチェックします。
しかし、インデックスに存在しないため、なぜかループを抜けてしまい、
「は」「豪雨」「です」
がチェックされていないように見受けられます。

以下のように変更すると、それっぽい結果が返ってきます。

diff RELEASE-1.0.9/lib/index.c RELEASE-1.0.9_fix/lib/index.c
2211c2211
<   while (!lex->status) {
---
>   while (lex->status != sen_lex_done) {
2235a2236
>   if (!limit) { return sen_success; }

diff RELEASE-1.0.9/lib/lex.c RELEASE-1.0.9_fix/lib/lex.c
292c292
<   if (lex->status) { return SEN_SYM_NIL; }
---
>   if (lex->status == sen_lex_done) { return SEN_SYM_NIL; }
315c315
<   } else {
---
>   }  {

しかし上記の対応では、
「*S1 "雨です"」
とすると、エラーメッセージが返ってしまいます・・・。
|e| cursor open failed (2)
検索キーワードが部分一致してしまうとエラーになるようです。

N-gramに関しては調べていません・・・。

以上です。




Senna-dev メーリングリストの案内
Back to archive index