Алгоритм определения нити "жаркость" - PullRequest
2 голосов
/ 19 декабря 2008

Я пытаюсь придумать способ определить, насколько "горячие" определенные темы на форуме. Какие критерии вы бы использовали и почему? Как бы они собрались вместе, чтобы дать оценку жаркости?

Критерии, о которых я думаю, включают:

  • сколько ответов
  • сколько времени прошло с последнего ответа
  • среднее время между ответами

Проблемы, которые должен решить этот алгоритм:

  • Тема с 500 ответами явно горячая, если только последний ответ не был больше года назад.
  • Тема с 500 ответами, на которые был дан ответ секунду назад, явно горячая, если для получения 500 ответов не понадобилось 4 года.
  • Тема с 15 ответами за последние 4 минуты действительно горячая!

Есть идеи, мысли или полные решения?

Ответы [ 8 ]

4 голосов
/ 19 декабря 2008

это может быть то, что вы ищете:

Алгоритм популярности

2 голосов
/ 19 декабря 2008

У Джеффа Этвуда хороший вопрос об этом с кучей информации о других "горячих" алгоритмах Я предлагаю использовать один из них и адаптировать его по своему вкусу.

1 голос
/ 19 декабря 2008

Самый простой алгоритм: Если после Y было больше X ответов, значит, жарко.

Если вы предпочитаете что-то масштабируемое, просто посчитайте, сколько ответов с момента у. Больше ответов означает больше жаркости.

0 голосов
/ 16 апреля 2010

Одна вещь, на которую вы должны обратить внимание, это то, могут ли люди «поиграть» в алгоритм, чтобы сделать / сохранить свои темы «горячими». На самом деле, вы можете в значительной степени предположить, что они будут.

Минимум, который вы должны сделать, чтобы препятствовать этому, - это рассматривать только ответы разных людей.

0 голосов
/ 19 декабря 2008

Почему бы просто не использовать своего рода модель экспоненциального затухания. Горячность темы = сумма (k ^ (время с момента публикации)) для всех сообщений. Преимущество в том, что его легко обновлять и вычислять. Вам придется поиграться с k и вашей единицей измерения времени (k должно быть <1, но довольно близко к ней) </p>

Текущее значение = значение на момент последнего сообщения * k ^ (время с момента последнего сообщения).
Жара после нового поста = текущая жара + 1

0 голосов
/ 19 декабря 2008

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

Поэкспериментировав с этим, я пришел к следующему уравнению:

log10($numOfReplies * 20000 / pow($timeSinceLastPost, 1.3))

Это все еще может использовать некоторую работу. Например, если есть действительно очень популярная, но старая ветка, она будет слишком горячей, но если кто-то ответит на нее, это вернет ее к вершине на несколько дней / недель.

0 голосов
/ 19 декабря 2008

Короче говоря, я обнаружил, что логарифмический спад "жара" является наиболее естественным.

0 голосов
/ 19 декабря 2008

Я подумал, что вы могли бы, вероятно, смоделировать это с уменьшающимися волнами здесь, используя амплитуду (или среднеквадратичное значение) для измерения температуры. Со временем волна уменьшается, и поэтому поздний ответ вызовет лишь небольшое волнение.

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

Только мои два цента.

...