2012-02-14 5 views
2

私はGmailのと同じようにしたいと思います。私のブログにはの提案が含まれていますが、タグが付いています。Gmailの「検討する」機能はどのように実装されていますか?

私は保存するタグを考えていたが、このように設定します。 three tables

と私は次のアルゴリズムを考えた:

//a blog post is published 
//it has the tags "A", "B" & "C" : 
if the tag set "A,B,C" doesn't exist 
    create it 
else 
    add 1 to "number of times used" 

と、タグを提案する:

//a blog post is being written. 
//the author includes the tags "A" and "C" 
//which tags should I suggest ? 
find all the tags sets that contain "A" and "C" 
    among them, find the one with the highest "number of times used" 
    suggest the tags of the set not already picked (A & C) 

がありますこのタスクを達成するためのより良い/スマートな方法?データベースモデルはどうですか? "A & Cを含むセット"のような検索が遅すぎるように最適化することはできますか?

+1

「暗黙のソーシャルグラフを使用して友達を推薦する」http://research.google.com/pubs/pub36371.html –

+0

うわー、非常にいいです:D – Manu

答えて

1

検索モデル問題:
非常に頻繁にタグを常に提案したものである可能性が最も高いので、あなたのモデルは、ペアA、Cに複数の関連タグがある場合でも、私には少しも単純化されたようです。

はおそらく、彼らはまた、「クエリ」に接続されている場合はまれな用語は、一般的にA and Bで使用されている場合以来、[ここでクエリがA and Bである]、希少な用語にブーストを与えるtf-idfモデルを、concider必要があります - それはおそらくそれらに非常に関連しているでしょう。

アイデアは簡単です:タグが頻繁にA and Bと一緒に使用されている場合は、それを強化してください。 [TF]
また、この用語は珍しい[このタグの総使用回数]である場合 - それを[IDF]
ブーストを与える各タグの「スコア」が組み合わさTF-IDFスコア

あろうパフォーマンスの問題:
このタスクでは、検索を高速化するためにinverted indexを作成することもできます。
Javaを使用している場合、apache luceneはあなたに役立つ成熟したライブラリです。

+0

tf * idfは素敵ですね、ありがとう! – Manu

1

これは、典型的なデータ関連マイニングと推奨の問題だと思います。データマイニングのためのAprioriアルゴリズムを試してみて、TOP N勧告を作成することができます。

解決策は機能しますが、私の選択肢では包括的ではありません。例えば ​​"A、B"と "A、B、C"とのセットは独立したセットではない。

関連する問題