1

(不完全に) クラスター化された文字列データがあり、1 つのクラスター内のアイテムは次のようになります。

[ 
  Yellow ripe banana very tasty,
  Yellow ripe banana with little dots,
  Green apple with little dots,
  Green ripe banana - from the market, 
  Yellow ripe banana,
  Nice yellow ripe banana,
  Cool yellow ripe banana - my favourite,
  Yellow ripe,
  Yellow ripe
],

最適なタイトルは「黄色の熟したバナナ」です。

現在、SQL GROUP BY を使用して、単純なヒューリスティックを使用しています。私のデータにはそのようなクラスターが大量に含まれており、それらは頻繁に変更され、新しい果物がクラスターに追加またはクラスターから削除されるたびに、クラスターのタイトルを再計算する必要があります。

改善したいのは以下の2点です。

(1)効率- たとえば、新しい果物の名前をクラスターのタイトルのみと比較し、毎回すべての果物のタイトルのグループ化/フレーズ クラスター化を回避します。

(2)精度- 最も一般的な完全な名前を探す代わりに、最も一般的なフレーズを抽出したいと考えています。現在のアルゴリズムは、2 回繰り返され、最も一般的な完全なフレーズである「Yellowripe」を選択します。ただし、「黄色の熟したバナナ」というフレーズは、特定のセットで最も一般的です。

Solr + Carrot2 を使用することを考えています (2 番目の経験はありません)。この時点で、文書をクラスター化する必要はありません。文書は他のパラメーターに基づいて既にクラスター化されています。中心となるフレーズをクラスターの中心/タイトルとして選択するだけで済みます。

任意の入力は非常に高く評価されています, ありがとう!

4

1 に答える 1

1

Solr は、隣接する単語のグループからトークンを作成するために使用できる、ShingleFilter と呼ばれる分析コンポーネントを提供します。それを分析チェーンに入れ(つまり、インデックスを作成するときに受信ドキュメントに適用します)、「フルーツクラスター」に制限されたクエリで結果フィールドのファセットを計算すると、すべてのリストを取得できます帯状疱疹の特徴とその発生頻度 - 頻度でソートして検索することもできると思います - これを簡単に使用して、必要なタイトルを導き出すことができると思います。次に、新しい果物を追加すると、その帯状疱疹が次回のファセット計算に自動的に含まれます。

この提案のもう少し具体的なバージョン:

fruit_shingle と cluster_id の 2 つのフィールドを作成します。

Fruit_shingle を、ShingleFilter およびその他の必要な処理 (ShingleFilter の前に、StandardTokenizer を使用して単語境界でトークン化するなど) で構成します。

クラスターの識別に使用するデータを使用して、cluster_id を一意の ID として構成します。

新しい果物ごとに、そのテキストを fruit_shingle に、その ID を cluster_id に保存します。

次に、クエリ「cluster_id:」のファセットを取得すると、単語、単語ペア、単語トリプレットなど (シングル) のリストが取得されます。最大長を持つように SingleFilter を構成できると思います。適切と思われる長さおよび/または頻度の組み合わせでファセットを並べ替え、それを果物クラスターの「タイトル」として使用します。

于 2011-09-16T20:00:33.200 に答える