Hacker News 文章热度排序算法

Hacker News 文章热度排序算法较为简单有效,使用 点赞数 点踩数发布时间 三个维度来衡量一篇文章的热度值。


对应的Python代码如下:

# Rewritten code from /r2/r2/lib/db/_sorts.pyx

from datetime import datetime, timedelta
from math import log

epoch = datetime(1970, 1, 1)

def epoch_seconds(date):
    td = date - epoch
    return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)

def score(ups, downs):
    return ups - downs

def hot(ups, downs, date):
    s = score(ups, downs)
    order = log(max(abs(s), 1), 10)
    sign = 1 if s > 0 else -1 if s < 0 else 0
    seconds = epoch_seconds(date) - 1134028003
    return round(sign * order + seconds / 45000, 7)

下面是针对smzdm商品排序(http://39.106.99.186/)修改的

from math import log

epoch = datetime(1970, 1, 1)

def epoch_seconds(date):
    td = date - epoch
    return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)

def score(ups, downs):
    return ups - downs/2  # 踩数太多,这里只取一半

def hot(ups, downs, date):
    s = score(ups-1, downs)  # -1剔除发布者自己的赞
    order = log(max(abs(s), 1), 10)
    sign = 1 if s > 0 else -1 if s < 0 else 0
    seconds = epoch_seconds(date) - 1134028003  # 2005-12-08 15:46:43之后

    # w表示: 当s=10时 相当于加了w个小时
    w = 1.25
    return round(sign * order + seconds / (3600*w), 7)

更精细的方法,可以看下Reddit的排序算法。

参考: https://medium.com/hacking-and-gonzo/how-reddit-ranking-algorithms-work-ef111e33d0d9

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、<Delicious> 算法:按照单位时间内用户的投票数进行排名。得票最多的项目,自然就排在第一位。 eg:"...
    Rainysong阅读 2,741评论 0 1
  • 前言 近期公司产品需要做一个内容推荐的功能,但限于人员和能力有限,经过调研,确定了一个简单相对我们可以实现的方案。...
    宇行信阅读 1,423评论 0 2
  • 最近开始在简书上混,今日在首页上不经意间看到一篇《从豆瓣电影评分算法说起》,感觉有点眼熟,就点了进去。 其实阿北的...
    数据虫巢阅读 33,366评论 6 172
  • 亲子日记第4天 时间过得真快,转眼之间又到周五了,美美哒,每次周六周日,我和儿子都能一起去体育场踢球。这周儿...
    niuniubaobei521阅读 142评论 0 2
  • 我只想静静, 像野花一样闲适, 自由生长, 自然绽放。 像野果一样恬淡, 倒垂枝头, 随风荡漾。 我只想静静, 像...
    牵手阳光约会海洋阅读 238评论 0 0