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に関しては調べていません・・・。 以上です。