尤川豪   ·  5月前
Exp. 1,630  ·  212 貼文  ·  145 留言
  分享   共 4,150 次點閱
共有 3 則留言
尤川豪   ·  5月前
Exp. 1,630  ·  212 貼文  ·  145 留言

非常棒的文章,開發論壇、討論區...等等需要替文章排序的功能時可以參考!

Reddit 文章的排名規則如下:

# 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)

非常簡潔有力的把發文時間、按讚數、倒讚數作為參數進去計算

而留言評論的排序公式則是:

# Rewritten code from /r2/r2/lib/db/_sorts.pyx
from math import sqrt

def _confidence(ups, downs):
    n = ups + downs

    if n == 0:
        return 0

    z = 1.281551565545
    p = float(ups) / n

    left = p + 1/(2*n)*z*z
    right = z*sqrt(p*(1-p)/n + z*z/(4*n*n))
    under = 1+1/n*z*z

    return (left - right) / under

def confidence(ups, downs):
    if ups + downs == 0:
        return 0
    else:
        return _confidence(ups, downs)

需要把文章新舊、按讚數等等綜合考量排序的時候,可以參考 Reddit 的作法

 
尤川豪   ·  5月前
Exp. 1,630  ·  212 貼文  ·  145 留言
 
HenryWu   ·  5月前
Exp. 9  ·  0 貼文  ·  1 留言

Thanks to share ~

 
您的留言
尤川豪
Exp. 1,630  ·  212 貼文  ·  145 留言

關於作者

Devs.tw 作者,喜歡分享&建造新東西的工程師。

歡迎在 Facebook 追蹤我!不定期分享有趣技術文章!

  查看個人檔案