【问题标题】:How to update content popularity scoring such as Hacker News algorithm?如何更新 Hacker News 算法等内容流行度评分?
【发布时间】:2010-10-07 19:25:45
【问题描述】:
我正在为我的社交网站使用定制版本的 Hacker News 流行度算法(具有许多喜欢和 cmets 的项目)。该算法运行良好,但我不知道如何正确更新项目得分(我将得分作为元数据存储在项目模型中)。
现在,我只是更新过去 9 天内列出的每个新点赞和评论的分数。这真的很慢而且资源很重,所以我正在寻找一种更好的方法来保持最新的分数。问题是每个项目在更改时都需要一个新分数以保持时间衰减。这样做的更好方法是什么?我在项目中使用 Django。
【问题讨论】:
标签:
python
django
algorithm
popularity
【解决方案1】:
好的。我已经使用不同的应用程序完成了它:
首先,您需要在 github 上安装“dokterbob/django-popularity”或“thornomad/django-hitcount”来跟踪访问链接的频率。
其次,您需要计算一个对象收到了多少票(喜欢或收藏)。为此,您可以尝试“brosner/django-voting”、“apgwoz/django-favorites”。
现在您必须使用这段代码 --django-populars 将它们放在一起。
我建议首先查看this code,了解如何将所需组件组合在一起。
【解决方案2】:
有很多方法可以做到这一点。一种简单的方法是按顺序对项目进行编号,并从每个项目的 ID 号的“排名 ID”开始。每当帖子被评为时,增加其排名号(反之亦然)。然后,按排名编号排序以正确排序。
另一种选择是指数衰减模型,它需要定期更新,但这些可以依靠投票,减少您必须执行的批量更新工作量。我写了一篇关于实现 here 的文章。它针对 App Engine,但通常很有用。