Есть ли драгоценный камень MongoDB Trending Topics? - PullRequest
2 голосов
/ 21 декабря 2011

У меня есть группа документов в MongoDB со значением «description» о размере твита. Мне нужно создать список популярных тем из этого. Ясно, что это решенная проблема, но я не могу найти точный ответ / жемчужину для выполнения работы без написания кода самостоятельно.

Я использую рубин и монгоид в своем приложении.

Есть ли рубиновый камень, который поможет или справится с этим? Спасибо.

Ответы [ 2 ]

6 голосов
/ 21 декабря 2011

Я не знаю такого драгоценного камня, но вот алгоритм, который вы можете написать для себя:

  1. Извлечение н-грамм из текстов. Поскольку тексты маленькие (размер твита, который вы сказали), извлеките все n-граммы, здесь нет ограничений.

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

  2. Вычислить TF-IDF весовые векторы для n-граммов каждого текста

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

  3. Использование косинусного сходства в качестве функции меры для алгоритма инкрементной кластеризации по вашим векторам, возможно, скрипт библиотеки Weka над JRuby

  4. Упорядочить все кластеры по численности населения. N-граммы в центрах самых больших кластеров - ваши модные темы.

3 голосов
/ 21 декабря 2011

Быстрый поиск rubygems.org показывает, что вам придется заняться программированием. Это хорошо, так как система общего обнаружения тенденций будет либо безнадежно сложной для настройки и настройки, либо ужасно угадывает, что диктует «тренд» в вашем приложении.

Я собираюсь сделать некоторые предположения относительно вашего заявления.

Давайте предположим, что пользователи самостоятельно классифицируют свои твиты, используя хэш-теги (#). Кроме того, давайте продолжим и скажем, что отсортированное количество этих хеш-тегов определит, была ли тема в тренде.

Теперь поговорим о части информатики. Учитывая наши предположения, приведенные выше, вам нужно будет иметь возможность быстро запрашивать и сортировать коллекцию хэштегов, чтобы выяснить, что в тренде.

Вы используете MongoDB и mongoid (с рельсами), поэтому самый простой способ сделать это - создать коллекцию, в которой есть документы-теги, содержащие количество их использования. Создание индексов по тегу и количеству

Когда кто-то пишет в Твиттере, выясните, что такое хеш-теги, найдите их в коллекции тегов и увеличьте их количество. Чтобы выяснить, что в тренде, запросите коллекцию тегов и отсортируйте по количеству. Это позволит вам получить все хеш-теги за все время.

Если вы хотите получить более конкретную информацию, вместо того, чтобы просто хранить счетчики, храните счетчики, разбитые на дельты времени (неделя, день, час и т. Д.), Возможно, сохраняя их отдельно. Вы можете создавать документы, которые представляют вашу дельту времени вместо отдельных тегов, и хранить все теги с их количеством внутри.

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

Вы также можете использовать ограниченную коллекцию. Надеюсь, это поможет, все это действительно зависит от того, что вы пытаетесь сделать. Вы можете по-настоящему сойти с ума и рассчитать тренды по времени и т. Д. Вы можете прочитать новостной код reddit или хакера, чтобы получить представление о том, на что это похоже.

...