代码之家  ›  专栏  ›  技术社区  ›  Fer

一个像Digg一样旋转的热门内容主页,如何将日期作为一个因素?

  •  6
  • Fer  · 技术社区  · 15 年前

    我正在构建高级图像共享Web应用程序。正如您所期望的,用户可以上传图片,其他人可以对其发表评论、投票并喜爱它。这些事件将决定我在“业力”领域捕捉到的图像的流行程度。

    现在我想创建一个类似Digg的主页系统,显示最流行的图片。很容易,因为我已经有了加权的业力分数。我只是把它向下分类,以显示20个最有价值的图像。

    缺少的部分是 时间 . 我不希望非常流行的图片总是出现在主页上。我想一个简单的解决方案是将结果集限制在最近24小时内。然而,我也在想,为了保持图像在一天中的旋转,时间可以是某种变量,其偏移量会影响图像的排序。

    具体问题:

    • 您会推荐简单的场景(仅在24小时内对最佳图像进行排序)还是更复杂的场景(使用日期时间偏移量作为排序的一部分)?如果你建议后者,在数学上有什么帮助吗?
    • 最好是运行一个计划服务来为主页标记图像,还是建议直接查询(我使用的是MySQL)
    • 作为一个额外的注意事项,主页应该支持分页,在一个安静的日子应该包括前几天的条目,以确保它总是“填充”。

    我不是要求社区构建这个算法,只是寻求一些建议:)

    4 回复  |  直到 15 年前
        1
  •  2
  •   Michael Herold    15 年前

    我将使用一个函数,在一段给定的时间过后,降低每个项目的“有效业力”。这有点像埃里克的方法。

    确定你希望“有效业力”减少的频率。然后将业力乘以基于这个周期的比例因子。

    effective karma = karma * (1 - percentage_decrease)
    

    哪里 percentage_decrease 由您的功能决定。例如,你可以

    percentage_decrease = min(1, number_of_hours_since_posting / 24)
    

    使每个物品的有效业力在24小时内降低到0。然后利用有效的业力来决定要显示什么图像。这是一个更稳定的解决方案,而不仅仅是减去发帖后的时间,因为它将业力在0和它的实际值之间缩放。最小值是将缩放保持在0的下限,因为每天一次,您将开始获得大于1的值。

    然而,这并没有从严格意义上考虑流行性。蒂姆的回答为如何考虑严格的人气(即页面浏览量)提供了一些思路。

        2
  •  1
  •   Tim Post Samir J M Araujo    15 年前

    对于您的第一个问题,我将使用稍微复杂一些的方法。你会想要一些“所有时间的最爱”在组合中。但不要一个人去,按实际数字去 意见 图像有。请记住,不是每个人都会登录并投票,但这并不会使这张图片不那么受欢迎。一个2岁,有10张选票和10万张选票的图片对人们来说显然比一个1岁,有100张选票和1万张选票的图片更重要。

    对于您的第二个问题,是的,您希望在首页进行某种缓存。要生成进入站点的入口点,需要进行大量的查询。然而,与此类似,你的网站类型往往会通过搜索引擎吸引到内部页面的流量。因此,尝试在任何地方观察/优化您的查询。

    对于第三个问题,按时间以外的因素(即视图的)进行搜索有助于确保始终拥有完整且动态的页面。我不确定在首页上分页,引导人们使用标签或搜索可能是更好的策略。

        3
  •  0
  •   Eric Petroelje    15 年前

    您可以计算一个“调整后的业力”类型的字段,它将考虑时间:

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

    然后,您可以直接在查询中计算和排序,也可以将其作为数据库中的实际字段,通过夜间进程或其他方式进行更新。就我个人而言,我会使用一个每晚更新它的过程,因为这可能会使算法在未来变得更加复杂。

        4
  •  0
  •   Ben    15 年前

    这个,我找到了 Lower bound of Wilson score confidence interval for a Bernoulli parameter

    看看这个: http://www.derivante.com/2009/09/01/php-content-rating-confidence/

    在第二个例子中,他解释了如何使用时间作为“新鲜度因子”。

    推荐文章