-1

数字でマークされたユーザーの関心のリストがあります。

すべてのユーザーは、いくつかの興味を持っています。単純な MongoDB クエリで、同様の、または近い関心を持つ他のユーザーを見つけることができるように、ユーザーの関心を表す数値をどのように作成すればよいでしょうか。

4

3 に答える 3

2

n個の異なる関心がある場合、各ユーザーはブール値の長さnのベクトルとして表すことができます。ここで、ユーザーが関心iをリストしている場合、 i番目の要素はtrueです。このような2つのベクトルは、余弦類似度、ジャッカード類似度、L1距離、L2距離などと比較できます。

于 2012-10-22T07:31:49.870 に答える
1

MongoDBで直接行う方法はわかりませんが、「biginteger」データ型を使用している場合は、関心をビットフィールドに減らします。その後、興味を削除することはできません (全員のビットフィールドを再計算せずに) が、興味を追加することはできます。次に、人物 A と B の興味を比較するには、C/C++ のような構文で操作を行います。

  • common=bitCount(A&B)AとBが共通の利益をいくつ持っているか
  • onlyA=bitCount(A^(A&B))A が持っていて、B が持っていない興味の数
  • onlyB=bitCount(B^(A&B))B が持っていて、A が持っていない利益の数
  • different=bitCount(A^B)A と B が合計でいくつの異なる興味を持っているか (onlyA+onlyB と同じ)
  • total=bitCount(A|B)A と B が合計でいくつの異なる興味を持っているか (共通 + 異なると同じ)

これらの数値から、関心がどの程度一致しているかを評価できます。正確な式は、同じ関心と異なる関心をどのように強調したいか、どの程度のスケールを希望するかに応じて異なります。

少なくとも Java の BigInteger クラスには、すぐに使用できるビット カウント メソッドがあります。それ以外の場合は、&1 および >>1 操作を使用してブルート フォース ループで実行できます。MongoDB がそのような構造をサポートしているか、big int データのビット カウント用の演算子/関数を持っているか、または MongoDB が big int データ型を持っているかどうかはわかりません...

于 2012-10-22T08:12:07.410 に答える
0

私はおそらく次の方法でこれを行うことができます

  1. データベースの列のすべての興味の部分を持ちます。
  2. すべてのユーザーについて、すべての列の値が 0 または 1 になります。
  3. 2 人のユーザーが密接な関心を持っているかどうかを調べるために、DB から関心の値を取得し、domainObject (各関心 (列) のフィールドを持つ) に格納します。次に、数に基づいて int フィールドを更新するコンパレータを実装します。一致する列。
  4. この数に基づいて、ロジックを決定できます。たとえば、合計関心が 10 で、一致が 7 を超える場合は近い、そうでない場合は閉じないなどです。
于 2012-10-22T07:43:51.493 に答える