2011-09-12 7 views
11

関連付けマイニングは、検索のために良い結果を得ているようです。関連する用語 in text corpora。このトピックについては、よく知られたLSAメソッドを含むいくつかの研究があります。関連付けを行う最も簡単な方法は、共起行列docs X termsを作成し、同じ文書内で最も頻繁に使用される用語を見つけることです。以前のプロジェクトでは、TermDocsを繰り返してLuceneで直接実装しました(私はIndexReader.termDocs(Term)と呼んでいます)。しかし、私はSolrに似た何かを見ることはできません。Solrで用語集のマイニングを実装する最も簡単な方法は何ですか?

だから、私のニーズは以下のとおりです。

  1. 特定のフィールド内の最も関連する用語を取得するには。
  2. 特定のフィールド内で指定されたに最も近い、という用語を取得するには

私は率は次のようにに答えます:

  1. 理想的には私が直接指定されたニーズをカバーしてSolrのコンポーネントを見つけたいと思い、それは、直接関連する用語を取得するためのものです。
  2. これができない場合は、指定フィールドの共起行列情報を取得する方法を探しています。
  3. これもオプションでない場合、私は1に最も簡単な方法を知りたいのですが)すべての用語を取得し、2)これらの用語はで発生する文書のIDS(番号)を取得します。
+0

私は、トピックをグーグルと私は答えを自分を待っています。ところで、Solrのクラスタリング機能は、「意味論的に関連する結果/ドキュメントをまとめてグループ化する方法」として記述されています。十分に近くない、そうですか? – aitchnyu

+0

クラスタリングは少し違うことです。まず第一に、それは用語ではなく文書で動作するので、用語をクラスタリングすることはできません(少なくとも、クラスタリングでは意味が分かりませんが、Solrで簡単に行う方法はわかりません)。反対のことが可能であるようにも思えますが、用語に関連マイニングを使用して文書に対してクラスタリングを実行できます。 – ffriend

答えて

2

まだ私の質問に答えがないので、自分の考えを書いてそれを受け入れる必要があります。それにもかかわらず、誰かがより良い解決策を提案した場合、私は喜んでそれを私の代わりに受け入れます。

私は連想マイニングの最も重要な部分であるため、共起行列を使用します。一般に、SolrはLuceneとの直接アクセスほど効率的ではありませんが、何らかの方法でこの行列を構築するために必要なすべての関数を提供します。行列を構築するために、我々は、必要があります。

  1. すべての用語または少なくとも最も頻度の高いもの、珍しい用語は、その性質上、アソシエーションマイニングの結果には影響しませんので。
  2. これらの用語が出現する文書、もう一度、少なくともトップの文書。

これらのタスクは、どちらも標準のSolrコンポーネントで簡単に実行できます。

TermsComponentまたはfaceted searchという用語を検索するには、最上位の用語(デフォルト)またはすべての用語(取得する用語の最大数を設定することにより、詳細については特定の機能のドキュメントを参照)を取得できます。

問題の用語を含むドキュメントを取得するには、単にこの用語を検索するだけです。ここでの弱点は、1学期につき1件のリクエストが必要であり、何千という用語が存在する可能性があるということです。別の弱点は、単純検索やファセット検索でも、見つかった文書の現在の用語の出現回数に関する情報が提供されないことです。

このようにすると、共起行列を構築することが容易になります。関連付けを行うには、Wekaのような他のソフトウェアを使用するか、例えばApriori algorithmという独自の実装を書くことが可能です。

+0

Solrの最新バージョンでは追加のオプションを実装できますか? – Saar

3

エクスポートすることができますLucene(またはSolr)インデックスをMahoutに設定し、Latent Dirichlet Allocationを使用します。 LDAがあなたの必要に応じてLSAに十分に近くない場合は、Mahoutから相関行列をとり、Mahoutを使用して特異値分解を行うことができます。

私はSolrのLSAコンポーネントを知りません。

+0

あなたの答えをありがとうが、実際には私はLSAは必要ありません - このトピックは非常に一般的であり、Solrはまだこのようなタスクをサポートしていないのが奇妙です。私が言及したように、私はすでにLuceneとの関連付けを検索するコードを持っています。だから私はSolrでそれをやる方法に興味があります。 – ffriend

+0

@ffriend:あなたが何を求めているのか分かりません。 SolrはLuceneと同じインデックスフォーマットを持っているので、Luceneで動作するコードはすべてSolrで動作します。 – Xodarap

+0

もちろん、私はSolrがLuceneを内部的に使用していることを知っています。Luceneから同じインデックスにアクセスし、私が望むものを得るために別のツールを書くことができます。しかし、それは不便です:私は2つの別々のプログラム(Solrと私のツール)を用意し、それらを別々にインストールし、それらを別々に起動します。私が望むのは、Solrコマンドやそれに関連する用語を見つけることです。もちろん、私はカスタムRequestHandlerを作成して、私が必要とするものを正確に得ることができます(実際にはこれ以上のオプションがない場合にはどうしますか)。しかし、まずこのタスクの何かが既に存在するかどうかを知りたい。 – ffriend

-1

あなたは次のクエリで見つかった文書には、現在の用語の出現回数を取得することができます:

http://ip:port/solr/someinstance/select?defType=func&fl=termfreq(field,xxx),*&fq={!frange l=1}termfreq(field,xxx)&indent=on&q=termfreq(field,xxx)&sort=termfreq(field,xxx) desc&wt=json 
関連する問題