Как Digg-как вращающаяся домашняя страница популярного контента, как включить дату в качестве фактора? - PullRequest
6 голосов
/ 26 апреля 2010

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

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 26 апреля 2010

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

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

effective karma = karma * (1 - percentage_decrease)

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

percentage_decrease = min(1, number_of_hours_since_posting / 24)

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

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

1 голос
/ 26 апреля 2010

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

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

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

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

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

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

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

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

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

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

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

...