Hacker News网站的文章排名算法工作原理

news/2024/5/13 18:17:16/文章来源:https://blog.csdn.net/weixin_33737134/article/details/86472504

 

In this post I'll try to explain how Hacker News ranking algorithm works and how you can reuse it in your own applications. It's a very simple ranking algorithm and works surprising well when you want to highlight hot or new stuff.

这篇文章我要向大家介绍Hacker News网站的文章排名算法工作原理,以及如何在自己的应用里使用这种算法。这个算法非常的简单,但却在突出热门文章和遴选新文章上表现的异常优秀。

Digging into news.arc code

Hacker News is implemented in Arc, a Lisp dialect coded by Paul Graham. Hacker News is opensource and the code can be found at arclanguage.org. Digging through the news.arc code you can find the ranking algorithm which looks like this:

深入 news.arc 程序代码
Hacker News是用Arc语言开发的,这是一种Lisp方言,由Y Combinator投资公司创始人Paul Graham创造。Hacker News的开源的,你可以在arclanguage.org找到它的源代码。深入发掘 news.arc 程序,你会找到这段排名算法代码,就是下面这段:

; Votes divided by the age in hours to the gravityth power.
; Would be interesting to scale gravity in a slider.(= gravity* 1.8 timebase* 120 front-threshold* 1 nourl-factor* .4 lightweight-factor* .3 )(def frontpage-rank (s (o scorefn realscore) (o gravity gravity*))(* (/ (let base (- (scorefn s) 1)(if (> base 0) (expt base .8) base))(expt (/ (+ (item-age s) timebase*) 60) gravity))(if (no (in s!type 'story 'poll))  1(blank s!url)                  nourl-factor*(lightweight s)                (min lightweight-factor* (contro-factor s))(contro-factor s))))

In essence the ranking performed by Hacker News looks like this:

本质上,这段 Hacker News采用的排名算法的工作原理看起来大概是这个样子:

Score = (P-1) / (T+2)^Gwhere,
P = points of an item (and -1 is to negate submitters vote)
T = time since submission (in hours)
G = Gravity, defaults to 1.8 in news.arc

As you see the algorithm is rather trivial to implement. In the upcoming section we'll see how the algorithm behaves.

Score = (P-1) / (T+2)^G
其中,
P = 文章获得的票数( -1 是去掉文章提交人的票)
T = 从文章提交至今的时间(小时)
G = 比重,news.arc里缺省值是1.8
正如你看到的,这个算法很容易实现。在下面的内容里,我们将会看到这个算法是如何工作的。

Effects of gravity (G) and time (T)

Gravity and time have a significant impact on the score of an item. Generally these things hold true:

  • the score decreases as T increases, meaning that older items will get lower and lower scores
  • the score decreases much faster for older items if gravity is increased

To see this visually we can plot the algorithm to Wolfram Alpha.

比重(G)和时间(T)对排名的影响
比重和时间在文章的排名得分上有重大的影响。正常情况下如下面所述:
当T增加时文章得分会下降,这就是说越老的文章分数会越底。
当比重加大时,老的文章的得分会减的更快
为了能视觉呈现这个算法,我们可以把它绘制到Wolfram Alpha。
得分随着时间是如何变化的

How score is behaving over time

Score 24 hours

As you can see the score decreases a lot as time goes by, for example a 24 hour old item will have a very low score regardless of how many votes it got.

Plot query:

你可以看到,随着时间的流逝,得分骤然下降,例如,24小时前的文章的分数变的非常低——不管它获得了如何多的票数。
Plot语句:

plot((30 - 1) / (t + 2)^1.8, (60 - 1) / (t + 2)^1.8,(200 - 1) / (t + 2)^1.8
) where t=0..24

How gravity parameter behaves

比重参数是如何影响排名的

Gravity effects

As you can see by the graph the score decreases a lot faster the larger the gravity is.

Plotting query:

图中你可以看到,比重越大,得分下降的越快。
Plot语句:

plot((p - 1) / (t + 2)^1.8, (p - 1) / (t + 2)^0.5,(p - 1) / (t + 2)^2.0
) where t=0..24, p=10

Python implementation

As already stated it's rather simple to implementing the score function:

def calculate_score(votes, item_hour_age, gravity=1.8):return (votes - 1) / pow((item_hour_age+2), gravity)

The most crucial aspect is understanding how the algorithm behaves and how you can customize it for your application and I hope I have contributed that knowledge :-)

Happy hacking!

plot(
    (p - 1) / (t + 2)^1.8, 
    (p - 1) / (t + 2)^0.5,
    (p - 1) / (t + 2)^2.0
) where t=0..24, p=10
Python语言实现
之前已经说了,这个评分算法很容易实现:
def calculate_score(votes, item_hour_age, gravity=1.8):
    return (votes - 1) / pow((item_hour_age+2), gravity)
关键是要理解算法中的各个因素对评分的影响,这样你可以在你的应用中进行定制。我希望这篇文章已经向你说明了这些 
祝编程快乐!

Edit:
You can view comments to this post and a lot more thoughts on HN's ranking here:

  • http://news.ycombinator.com/item?id=1781013

Edit:
Paul Graham has shared the updated HN ranking algorithm:

    (= gravity* 1.8 timebase* 120 front-threshold* 1nourl-factor* .4 lightweight-factor* .17 gag-factor* .1)(def frontpage-rank (s (o scorefn realscore) (o gravity gravity*))(* (/ (let base (- (scorefn s) 1)(if (> base 0) (expt base .8) base))(expt (/ (+ (item-age s) timebase*) 60) gravity))(if (no (in s!type 'story 'poll))  .8(blank s!url)                  nourl-factor*(mem 'bury s!keys)             .001(* (contro-factor s)(if (mem 'gag s!keys)gag-factor*(lightweight s)lightweight-factor*1)))))

 



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_736415.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站关键词如何合理布局?

要做好网站优化,懂得合理布局网站关键词很重要。而我们平时写网站优化方案或是开始新站的网站优化,可以先从合理布局网站关键词开始。今天轩哥seo和大家谈网站关键词如何合理布局。网站每个页面的等级权重不同,决定了不同页面打分关键词定位有…

网站实现微博登录自动关注微博的权限,scope权限!

提示:本人是网站开发的新手,所学的一切都是自学的,所以有任何错误,请大家帮忙多多指出问题! 最近做一个网站想要实现用微博登录,并且自动关注网站官方微博的功能,其实之前我实现过这个功能&…

11_14_第六阶段:大前端进阶||07-Vue详解||P16:Vue实战快速上手【vue+element||文档网站生成工具docsify】【观看狂神随笔】

Vue:实战快速上手 有些控件也可以配合Layui来实现动态的弹窗出来 现在的主流 桌面化应用:ElementUI弹窗化应用:Layui 1.创建工程 注意: 命令行都要使用管理员模式运行 (1.1)创建一个名为 hello-vue 的工程 ,注意目…

用PhantomJS来给AJAX站点做SEO优化

转 https://www.mxgw.info/t/phantomjs-prerender-for-seo.html 腾讯问卷所有动态内容,全部由Ajax接口提供。 众所周知,大部分的搜索引擎爬虫都不会执行JS,也就是说,如果页面内容由Ajax返回的话,搜索引擎是爬取不到部分…

个人网站设计:25个国外优秀案例带给你灵感

个人网站正变得越来越流行,它们可以有效地进行促销,找工作,个人品牌以及与朋友和家人沟通中使用。这些个人网站往往可以作为一个创造性的出口,并允许网站所有者更多的自由。 在这篇文章中,我们将分享精心设计的25例个人…

linux安装tomcat_【实战演练】Linux操作系统07-用tomcat搭建网站

#本文欢迎转载,转载请注明出处和作者。实验环境:操作系统:CentOS6.5源码程序:JSPGOU(开源代码分享:https://www.jb51.net/codes/552125.html,侵权删除)tomcat:8.0.36数据…

IE无法打开internet网站已终止操作的解决的方法

用IE内核浏览器的朋友,或许不经意间会碰到这样滴问题:打开某个网页时,浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”。而大多数情况下该页面甚至非常可能看起来已经载入完成,内容能够全然显…

一人网站所有的 ip地址_网站如何防御DDOS攻击?

分布式拒绝服务攻击(DDOS)是目前常见的一种网络攻击方法,它的英文全称是Distributed Denial of Service?简单的说,许多DoS攻击源一起攻击服务器,形成了DDOS攻击,从而增加拒绝服务攻击的威力。通常,攻击者通…

webp转换gif工具_好用资源、软件、工具、网站 | 第14期

内容均来自网络,版权归原作者所有,侵删,我们不生产资源,只是资源的搬运工,不要把所有的给予都习惯的当作理所当然。探记一款专注于个人记录的软件。多样化的记录模板,模块间可实现数据互通。随时随地记录日常、整理生活、收藏惊喜和感动支持iOS 和Android端&#xf…

php连接mysql制作网站的教程,MySQL与PHP的连接教程步骤(图文)

本篇文章我们介绍一下PHP与MySQL的整合,既然是与MySQL整合,那么我们首先肯定是要安装MySQL。下面我们就介绍下MySQL的安装方法。第一步,下载MySQL。下载PHP可以去PHP中文网下载站下载最新版本。第二步,安装MySQL数据库第三步&…

技术网站 --菜鸟教程

2019独角兽企业重金招聘Python工程师标准>>> 最近逛论坛时,发现一个比较好的网站,贴出来供大家分享 http://www.runoob.com/ 转载于:https://my.oschina.net/u/2312022/blog/523947

从零开始创建属于自己的网站(转)

准备域名 如果已经有域名的用户可以跳过这一步,如果没有的话可以在万网购买,.com等国际域名大约在39元/年,部分国内域名仅需要9元。准备服务器 如果已经有服务的用户也可以跳过这一步,如果没有的话可以选择购买阿里云的服务器。如…

python爬网站图片教程_python爬虫爬取图片的简单代码

Python是很好的爬虫工具不用再说了,它可以满足我们爬取网络内容的需求,那最简单的爬取网络上的图片,可以通过很简单的方法实现。只需导入正则表达式模块,并利用spider原理通过使用定义函数的方法可以轻松的实现爬取图片的需求。1、…

搭建web网站实验

完成实验要求 实验要求:用Linux系统搭建一个web网站 首先检查镜像文件是否导入 如果没有/dev/sr0目录下的镜像文件,检查VMvare右下角磁盘驱动器是否打开,如图第二个 将镜像文件挂载(mount)到虚拟机上 进入到“/etc…

java 抓取网站内容 异常code: 403

2019独角兽企业重金招聘Python工程师标准>>> HTTP 403命令是禁止恶意访问此网站,不能从此网站中抓取内容。如果是服务器端禁止抓取,那么这个你可以通过设置User-Agent来欺骗服务器: connection.setRequestProperty("User-Age…

java后端做教育视频网站源码_基于 Java Spring cloud的开源在线教育系统调试实战...

开篇之前分享过一个php的开源教育系统,今天来一个java的。知识付费的风口就不说了,大家都明白的。很多公司都在搞,今天继续来搞开源的。该系统采用前后端分离模式,前台采用vue.js为核心框架,后台采用Spring Cloud为核心…

apache对文件的读写权限_处理好网站的文件权限=保护好你额头的发际线!

是不是还在为处理不好网站的文件权限问题而日夜焦虑呢?其实刚开始在Linux服务器上建站的小伙伴们一定会对网站上不同用户的权限处理存在疑惑,那么就算为了你的发际线你也一定要看完本文。下面我们先来捋清这个问题的解决思路。首先我们来思考&#xff1a…

网页服务器站点是什么意思,网站服务器出错是什么意思_网站服务器出错原因...

网站服务器出错是什么意思网站服务器出错是指互联网数据中心中存放网站的服务器不能正常运行。网站服务器( WebsiteServer )是指在互联网数据中心中存放网站的服务器。网站服务器主要用于网站在互联网中的发布、应用,是网络应用的基础硬件设施。服务器软件&#xff…

服务器网页提示网站正在进行维护,运行“ll”命令提示命令找不到怎么解决_网站服务器运行维护,ll,找不到,命令...

怎么解决CentOS7忘记root密码的问题_网站服务器运行维护下面由centos系统教程​栏目给大家介绍CentOS7忘记root密码的处理方法,希望对需要的朋友有所帮助!如果在操作过程中发现无效,看看是不是自己在修改密码的时候小键盘没开启,因…

程序视频卡php,javascript - php做视频网站服务器很卡怎么办??

环境:php5.3.9Apache 22mysql5.6.xwindows使用做视频网站的时候碰到的几个问题(本地环境测试):A. 几十个视频。通过 canvas 截取视频第一帧做封面。// 视频源列表var vSrcList [src1 , src2 , src3 ....];// 队列方式截取视频第一帧(如果不采取队列方式…