4

Lucene を使用して検索可能なサイトがあります。ログから、ユーザーが単数形の用語を入力したために探しているものが見つからない場合があることに気付きましたが、その用語の複数形のみがサイトで使用されています。単語の他の形の用法も検索してみたいと思います。これは何度も解決されていると確信している問題ですが、これに対するベストプラクティスは何ですか?

注意: このサイトには英語のコンテンツしかありません

私が考えたいくつかのアプローチ:

  1. ある種のシソーラス ファイルで単語を調べて、特定の単語の別の形式を判断します。
    • いくつかの例:
      • 「車」を検索すると、クエリに「車」も追加されます。
      • "carry" を検索すると、クエリに "carries" と "carried" も追加されます。
      • "small" を検索すると、"smaller" と "smallest" もクエリに追加されます。
      • 「can」を検索すると、「can't」、「cannot」、「cans」、「canned」もクエリに追加されます。
      • 逆に動作するはずです (つまり、"carries" を検索すると、"carry" と "carried" が追加されます)。
    • 欠点:
      • 辞書/シソーラスが頻繁に更新されない限り、多くの新しい専門用語では機能しません。
      • シソーラス ファイルの検索のパフォーマンスについてはよくわかりません。
  2. いくつかのヒューリスティックに基づいて、アルゴリズム的に代替フォームを生成します。
    • いくつかの例:
      • 単語が「s」、「es」、「ed」、「er」、または「est」で終わる場合は、接尾辞を削除します
      • 単語が「ies」または「ied」または「ier」または「iest」で終わる場合は、「y」に変換します。
      • 単語が「y」で終わる場合は、「ies」、「ied」、「ier」、「iest」に変換します。
      • 単語に「s」、「es」、「er」、「est」を追加してみてください。
    • 欠点:
      • ほとんどの入力に対して多くの非単語を生成します。
      • ハックのように感じます。
      • TheDailyWTF.com で見つけたもののように見えます。:)
  3. もっと洗練された何か?

私は最初の 2 つのアプローチの何らかの組み合わせを行うことを考えていますが、シソーラス ファイル (または「シソーラス」は完全に正しくないため、または「辞書」ではないため、そのファイルが何と呼ばれているか) を見つける場所がわかりません。 )。

4

5 に答える 5

4

PorterStemFilterを分析パイプラインに含めることを検討してください。インデックスを構築するときに使用されるクエリに対して、同じ分析を必ず実行してください。

また、ランカスター ステミングアルゴリズムを使用して、良好な結果を得ました。をガイドとして使用するPorterStemFilterと、Lucene と簡単に統合できます。

于 2009-05-21T16:33:15.923 に答える
4

単語のステミングは英語では問題なく機能しますが、単語のステミングがほぼ不可能な言語 (私のような) では、オプション #1 が実行可能です。私の言語 (アイスランド語) の Lucene 用のそのような実装が少なくとも 1 つあることを知っていますが、これは非常にうまく機能しているようです。

于 2009-05-22T12:25:26.117 に答える
3

それらのいくつかは、かなりきちんとしたアイデアのように見えます。個人的には、クエリにいくつかのタグを追加して (クエリ変換) あいまいにするか、組み込みのFuzzyQueryを使用できます。

あいまい検索「クエリタグ」を使ってレーベンシュタインも使われています。「車」で検索してみてください。クエリを「car~」に変更すると、「car」や「cars」などが検索されます。クエリには、必要なほとんどすべてを処理する必要がある他の変換があります。

于 2009-05-21T15:25:43.767 に答える
1

専門分野(園芸でこれを行った)または通常のステミング方法でうまく機能しない言語で作業している場合は、クエリロギングを使用して手動ステミングテーブルを作成できます。

考えられるすべての不一致/人々が検索しているすべての不一致に対して単語->語幹マッピングを作成し、インデックス作成または検索時に、テーブルにある単語を適切な語幹に置き換えます。クエリキャッシングのおかげで、これはかなり安価なソリューションです。

于 2009-05-28T19:09:36.333 に答える
0

ステミングは、この問題に対処する非常に標準的な方法です。Porter のステマーは、標準的なキーワード検索に対してかなり積極的であることがわかりました。意味の違う言葉を混同してしまうのです。KStemmer アルゴリズムを試してください。

于 2009-05-23T20:27:19.927 に答える