联系信息

一种网站内容综合排序的算法(PHP)

2020-11-25 10:57 By 致远 140
当前位置: 企业网站建设 > ThinkPHP > 一种网站内容综合排序的算法(PHP)

本代码主要是针对公司排名,文章或其他排名方法参考调整即可。


$days=log($d['days']+2)*2;//连续登录天数,7天未登录复位,这个需要另外写程序来实现,这里只是调用
$view=log($d['view']+2);//主页访问总数
$pro=log(($d['hpro']+$d['lpro'])*($d['hpro']-$d['lpro'])/5+1)*2;//hpro为高质量产品数量 lpro为低质量产品数量,二者相加即为发布的产品总量
$case=log(($d['hcase']+$d['lcase'])*($d['hcase']-$d['lcase'])/5+1)*3;//案例,同上
$art=log(($d['hart']+$d['lart'])*($d['hart']-$d['lart'])/8+1)*2;//文章,同上
$fz=$days+$view+$pro+$case+$art;
$now=time();//现在时间
$fm=$now-$d['regtime']+1+pow(($now-$d['ltime'])/2,1.5);//regtime公司注册时间 ltime上次登录时间
$sort=$fz/$fm;
本代码主要参考了Stack Overflow的算法。原算法如下图所示:


2020031020121737

具体参数解释如下:

1. Qviews(问题的浏览次数)— log(Qviews)*4

某个问题的浏览次数越多,就代表越受关注,得分也就越高。这里使用了以 10为底的对数,用意是当访问量越来越大,它对得分的影响将不断变小。

2. Qscore(问题得分)和 Qanswers(回答的数量)— (Qanswers * Qscore)/5

Qscore(问题得分)= 赞成票-反对票。如果某个问题越受到好评,排名自然应该越靠前。Qanswers 表示回答的数量,代表有多少人参与这个问题。这个值越大,得分将成倍放大。这里需要注意的是,如果无人回答,Qanswers 就等于0,这时 Qscore 再高也没用,意味着再好的问题,也必须有人回答,否则进不了热点问题排行榜。

3. Ascores(回答得分)— sum(Ascores)

一般来说,”回答”比”问题”更有意义。这一项的得分越高,就代表回答的质量越高。但是简单加总的设计还不够全面。这里有两个问题。首先,一个正确的回答胜过一百个无用的回答,但是,简单加总会导致,1个得分为 100 的回答与 100 个得分为 1 的回答,总得分相同。其次,由于得分会出现负值,因此那些特别差的回答,会拉低正确回答的得分。

4. Qage(距离问题发表的时间)和 Qupdated(距离最后一个回答的时间)— ((Qage+1) – ((Qage – Qupdated)/2)) ^ 1.5

Qage 和 Qupdated 的单位都是小时。如果一个问题的存在时间越久,或者距离上一次回答的时间越久,Qage 和 Qupdated 的值就相应增大。也就是说,随着时间流逝,这两个值都会越变越大,导致分母增大,因此总得分会越来越小。

总结:Stack Overflow 热点问题的排名,与参与度(Qviews 和 Qanswers)和质量(Qscore 和 Ascores)成正比,与时间(Qage 和 Qupdated)成反比。

网上的类似算法还有很多,只是有的我看不懂,就不做记录了,下面再附一个比较简单的算法(Hacker News):

Hacker News算法



© 致远 2020-11-25,原创内容,转载请注明出错:一种网站内容综合排序的算法(PHP)

留下您的评论

>