4

Luceneドキュメントにチーズバーガーという単語が含まれていて、ユーザーがハンバーガーを検索してこのドキュメントが表示されるようにしたいと思います。この複合語をチーズハンバーガーに分解するには、おそらくカスタムアナライザーが必要になると思います。ただし、言葉を壊すことも無関係な結果をもたらす可能性があります。

例:生産のインデックスを作成するときに製品イオンのインデックスも作成すると、ユーザーが生産を含むイオンドキュメントを検索すると表示されますが、これは関係ありません。

したがって、単純なワードブレーカーはそれをカットしません。チーズバーガーがハンバーガーチーズに関連していることを知る方法が必要ですが、その生産はイオンに関連していません。

これを達成するためのよりインテリジェントなプロセスはありますか?

これは、語幹を語根の形に減らすためのステミングのような名前を持っていますか?

4

5 に答える 5

1

同義語をどれだけ正確にするかによっては、潜在意味解析(LSA)などのアプローチとLDAなどのその変形を調べる必要がある場合があります。より簡単なアプローチは、Wordnetなどのオントロジーを使用して検索を拡張することです。 。ワードネットのLuceneインデックスが利用可能です。ただし、シナリオにドメイン固有の語彙が含まれている場合は、「マッピング」オントロジーを生成する必要がある場合があります。

于 2012-04-26T03:48:39.643 に答える
1

総当たりアルゴリズムを使用して辞書に基づいて複合名詞を分割するDictionaryCompoundWordTokenFilterを確認する必要があります。

于 2012-04-24T16:12:05.533 に答える
0

ほとんどの場合、先頭のワイルドカード*ハンバーガーでワイルドカードクエリを使用できます。クエリパーサーで先頭のワイルドカードのサポートを有効にするだけで済みます。

parser = new QueryParser(LuceneVersion.getVersion(), searchedAttributes, analyzer);
parser.setAllowLeadingWildcard(true);

注意:先頭のワイルドカードは検索速度を低下させる可能性があります。

より具体的な解決策が必要な場合は、ステミングを使用することをお勧めします。本当に適切なアナライザーを見つけることの問題なら。SnowballAnalyzer(http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/analysis/snowball/SnowballAnalyzer.html)など、いくつかの言語のステミング実装があります。

よろしくお願いします、

クリス

于 2012-04-24T15:56:49.860 に答える
0

単語を見て関連付けを取得することは、他の単語に拡大することはありません。たとえば、「whopper」がハンバーガーに関連付けられているのか、「big-mac」がチーズに関連付けられているのかは、単語を見ただけではわかりません。検索で関連付けを認識させるには、「AはBです」や「AにはBが含まれています」などの関連付けのデータベースが必要になる可能性があります。(Mikosが述べたように、WordNetはそのようなデータベースを提供していると思います。)次に、クエリにBが表示されたら、Aも検索するようにクエリを変換します。

于 2012-04-26T06:24:24.283 に答える
0

根本的な質問は、インデックスを作成しているコレクションの大きさです。すべての同義語と関連する単語がすでにわかっているコレクションのインデックスを作成する場合、インデックスには、関連する単語「cheese」と「burger」を含む「cheeseburger」のように、同義語と関連する単語を直接含めることができます。(LOINCの標準的な医学用語であるLuceneインデックスで正常に使用されているアプローチ。)

人間の言語全体(英語、中国語など)の一般的な問題を解決しようとしている場合は、上記のような意味分析に移行する必要があります。

索引付けしている分野の対象分野の専門家と話し合って、用語の検索方法を確認すると役立つ場合があります。どの同義語/関連単語を使用しているか、同義語/関連単語のリストを定義しているか、必要か/ステミングなどを使用します。これにより、どのアプローチ(直接同義語/関連語の包含または意味分析)を追求する必要があるかについてのアイデアが得られるはずです。

于 2012-04-26T12:19:41.660 に答える