2008-12-19 3 views
2

Я пытаюсь найти способ определить, как «горячие» определенные потоки находятся на форуме. Какие критерии вы бы использовали и почему? Как они собрались вместе, чтобы дать оценку горячности?Алгоритм определения потока «hotness»

Критерии Я имею в виду, включают:

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

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

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

Любые идеи, мысли или комплексные решения там?

ответ

0

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

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

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

1

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

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

0

Вкратце я нашел логарифмический распад «жаркости», чтобы быть наиболее естественным.

2

Jeff Atwood имеет a nice question об этом с тонной информацией по другим «горячим» алгоритмам. Я предлагаю использовать один из них и адаптировать его по своему вкусу.

0

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

После игры с этим я придумал это уравнение, в настоящий момент:

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

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

0

Почему бы просто не использовать своего рода экспоненциальную модель распада. Hotness of thread = sum (k^(время с момента публикации)) для всех сообщений. Это имеет то преимущество, что очень легко обновлять и вычислять. Вам нужно будет играть с k и единицей измерения времени (k должно быть < 1, но довольно близко к нему)

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

0

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

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

Смежные вопросы