2

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

アプリでルビーとモンゴイドを使用しています。

これを支援または処理するルビーの宝石はありますか? ありがとう。

4

2 に答える 2

6

私はそのような宝石を知りませんが、ここにあなた自身のために書くかもしれないアルゴリズムがあります:

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

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

  2. 各テキストの n-gram の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. ベクトルに対するインクリメンタル クラスタリングアルゴリズムの測定関数としてコサイン類似度を使用します。JRubyでWekaライブラリのスクリプトを作成することもできます

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

于 2011-12-21T18:47:42.487 に答える
3

rubygems.orgを簡単に検索すると、プログラミングを行う必要があることがわかります。傾向を一般的に検出するシステムは、セットアップと調整が絶望的に​​困難であるか、アプリケーションの「傾向」を決定するものを推測するのがひどいため、これは良いことです。

私はあなたのアプリケーションについていくつかの仮定を立てるつもりです.

ユーザーがハッシュタグ (#) を使用してツイートを自己分類しているとします。また、これらのハッシュ タグの並べ替えられた数によって、トピックがトレンドであるかどうかが判断されるとしましょう。

次に、コンピューター サイエンスの部分について話しましょう。上記の仮定を考えると、ハッシュタグのコレクションをすばやくクエリおよびソートして、トレンドを把握できる必要があります。

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

誰かがツイートしたら、ハッシュタグが何であるかを把握し、タグコレクションでそれらを調べて、カウントを増やします。トレンドを把握するには、タグ コレクションをクエリし、カウントで並べ替えます。これにより、常にトレンドのハッシュタグが取得されます.

カウントを保存するだけでなく、より具体的に取得したい場合は、カウントを時間のデルタ (週、日、時間など) で分割して保存し、おそらくそれらを別々に保存します。個々のタグの代わりにタイム デルタを表すドキュメントを作成し、すべてのタグをそのカウントとともに保存できます。

{
    start: "start datetime",
    end: "end datetime",
    tags: {
        awesome: 3,
        cool: 2,
        boring: 2
    }
}

上限のあるコレクションを使用することもできます。お役に立てば幸いです。これはすべて、実際に何をしようとしているのかによって異なります。あなたは本当に夢中になって、時間の減衰などで傾向を計算することができます.redditまたはハッカーのニュースコードを読んで、それがどのようなものかをよく理解することができます.

于 2011-12-21T18:30:21.453 に答える