Вращающаяся домашняя страница популярного контента, похожая на Digg, как включить дату в качестве фактора?

StackOverflow https://stackoverflow.com/questions/2715941

  •  01-10-2019
  •  | 
  •  

Вопрос

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

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

Часть, которой не хватает, это время.Я не хочу, чтобы чрезвычайно популярные изображения всегда были на главной странице.Я думаю, простое решение - ограничить набор результатов последними 24 часами.Однако я также думаю, что для того, чтобы вращение изображения происходило в течение дня, время может быть какой-то переменной, где его смещение влияет на сортировку изображения.

Конкретные вопросы:

  • Вы бы порекомендовали простой сценарий (просто отсортируйте лучшие изображения в течение 24 часов) или более сложный (используйте смещение даты и времени как часть сортировки)?Если вы посоветуете последнее, какая-нибудь помощь по математическому решению этого вопроса?
  • Было бы лучше запустить службу по расписанию для пометки изображений для домашней страницы, или вы бы посоветовали прямой запрос (я использую MySQL)
  • В качестве дополнительного примечания, домашняя страница должна поддерживать подкачку, а в спокойный день должна включать записи за предыдущие дни, чтобы быть уверенной, что она всегда "заполнена".

Я не прошу сообщество создавать этот алгоритм, просто ищу какой-нибудь совет :)

Это было полезно?

Решение

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

Определите, как часто вы хотите, чтобы "эффективная карма" уменьшалась.Затем умножьте карму на коэффициент масштабирования, основанный на этом периоде.

effective karma = karma * (1 - percentage_decrease)

где percentage_decrease определяется вашей функцией.Например, вы могли бы сделать

percentage_decrease = min(1, number_of_hours_since_posting / 24)

чтобы сделать это таким образом, эффективная карма каждого предмета уменьшается до 0 в течение 24 часов.Затем используйте эффективную карму, чтобы определить, какие изображения показывать.Это немного более стабильное решение, чем просто вычитание времени с момента публикации, поскольку оно масштабирует карму между 0 и ее фактическим значением.Минимальное значение - поддерживать масштабирование на нижней границе 0, так как по прошествии дня вы начнете получать значения, превышающие 1.

Однако это не учитывает популярность в строгом смысле этого слова.Ответ Тима дает некоторые идеи о том, как добиться строгой популярности (т.е.просмотры страниц) с учетом.

Другие советы

Для вашего первого вопроса я бы пошел с чуть более сложным методом. Вы захотите некоторые «все время любимые» в смеси. Но не пройдите по одному времени, пройдите по количеству фактических Просмотры Изображение имеет. Имейте в виду, что не все идут в систему и проголосовать, но это не делает изображение любому менее популярным. Изображение, которое два года с 10 голосами и просмотром 100K, очевидно, более важно для людей, чем изображение, которое составляет 1 год, с 100 голосами и 1K просмотров.

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

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

Вы могли бы просто рассчитать «скорректированную карму» поле типа, которое потребуло бы во внимание:

adjusted karma = karma - number of hours/days since posted

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

Это, я нашел это, Lower bound of Wilson score confidence interval for a Bernoulli parameter

Посмотри на это: http://www.derivante.com/2009/09/01/php-content-rating-confened/

На втором примере он объясняет, как использовать время как «фактор свежести».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top