2011-12-21 10 views
2

MongoDBには、ツイートのサイズに関する「説明」値を持つ文書群があります。私はこれから傾向トピックリストを生成する必要があります。明らかにこれは解決された問題ですが、コードを自分で書くことなく仕事を終えるための決定的な答え/宝石を見つけることはできません。MongoDBトレンドトピックの宝石はありますか?

私は自分のアプリでruby & mongoidを使用しています。

ルビーの宝石はありますか?ありがとう。

答えて

3

クイック検索rubygems.orgあなたはいくつかのプログラミングを行う必要があることを敬遠します。これは、一般的にトレンドを検出するシステムが、セットアップが困難でなく、アプリケーションの「トレンド」を決定づけるものを推測するのが厄介であるかのどちらかが良いことです。

私はあなたのアプリケーションについていくつかの仮定をします。

ユーザーがハッシュタグ(#)を使用して自分のつぶやきを自分で分類しているとしましょう。また、これらのハッシュタグのソートされた数が、トピックがトレンドしていたかどうかを判断するとします。

ここで、コンピュータサイエンスの部分について説明しましょう。上記の前提を前提にすると、ハッシュタグのコレクションをすばやく照会およびソートして、傾向を把握する必要があります。

MongoDBとmongoid(レール付き)を使用しているので、これを行う最も簡単な方法は、使用回数が含まれているタグ文書を持つコレクションを作成することです。タグとカウントのインデックスを作成します。

誰かがつぶやくと、ハッシュタグが何であるか把握し、それらをタグコレクションで探し、カウントを増やします。トレンドを把握するには、タグコレクションをクエリし、カウント順に並べ替えます。これは、すべての時間トレンドのハッシュタグを取得します。

カウントを格納するだけでなく、タイムデルタ(週、日、時間など)で区切ってカウントを格納するのではなく、個別に格納するなど、より具体的にする場合は、個々のタグではなく、時間デルタを表すドキュメントを作成して、すべてのタグをカウントとともに格納することができます。

キャップ付きコレクションを使用することもできます。あなたが何をしようとしているかによって、これは本当に役立ちます。あなたは本当に夢中になり、時間の崩壊などの傾向を計算することができます。あなたは、そのようなものの良いアイデアを得るために、redditまたはハッカーのニュースコードを読むことができます。

6

私はそのような宝石を知っているが、ここではあなた自身のために書くことのアルゴリズムです:

  1. はテキストからn-gramsを抽出します。テキストは小さいので(あなたが言ったツイートサイズ)、すべてのn-gramを抽出します。ここでは制限はありません。

    "I eat icecream" => {(I), (eat), (icecream), (I eat), (eat icecream), (I eat icecream)}

  2. 各テキストのnグラムのための

    計算TF-IDF重みベクトル

    {(I):0.1, (eat):0.01, (icecream):0.2, (I eat):0.12, (eat icecream):0.001, (I eat icecream):0.00012}

  3. の上にベクトルを超えるincremental clusteringアルゴリズムのための対策機能として使用cosine similarity、多分スクリプトWekaライブラリーJRuby

  4. すべてのクラスタを母集団サイズで並べ替えます。最大のクラスタの中心にあるnグラムはあなたのトレンディなトピックです。

関連する問題