Algorithm 基于视图/注释计算页面重要性的算法
我需要一个算法,允许我根据页面的浏览量和评论数为我的网站确定一个合适的Algorithm 基于视图/注释计算页面重要性的算法,algorithm,language-agnostic,math,ranking,sitemap.xml,Algorithm,Language Agnostic,Math,Ranking,Sitemap.xml,我需要一个算法,允许我根据页面的浏览量和评论数为我的网站确定一个合适的字段 对于不熟悉站点地图的用户,优先级字段用于表示页面相对于同一网站上其他页面的重要性。它必须是介于0和1之间的十进制数 该算法将接受两个参数,viewCount和commentCount,并将返回优先级值。例如: GetPriority(100000, 100000); // Damn, a lot of views/comments! The returned value will be very close to 1,
字段
对于不熟悉站点地图的用户,优先级字段用于表示页面相对于同一网站上其他页面的重要性。它必须是介于0和1之间的十进制数
该算法将接受两个参数,viewCount
和commentCount
,并将返回优先级值。例如:
GetPriority(100000, 100000); // Damn, a lot of views/comments! The returned value will be very close to 1, for example 0.995
GetPriority(3, 2); // Ok not many users are interested in this page, so for example it will return 0.082
Priority=W1*视图/MaxViewsOfAllarticle+W2*注释/MaxCommentsOfAllarticle
W1+W2=1时
尽管如此,只需使用
0.5*log\u10(10+视图)/log\u10(10+最大视图)+0.5*log\u10(10+注释)/log\u10(10+最大注释)
您在SQL查询中提到过这样做,所以我将给出示例
如果您有一个表/视图页面
,如下所示
Pages
-----
page_id:int
views:int - indexed
comments:int - indexed
然后你可以写信订购
SELECT * FROM Pages
ORDER BY
(0.3+LOG10(10+views)/LOG10(10+(SELECT MAX(views) FROM Pages))) +
(0.7+LOG10(10+comments)/LOG10(10+(SELECT MAX(comments) FROM Pages)))
我故意在观点和评论之间选择不平等的权重。与视图/评论保持同等权重可能会出现的一个问题是,排名变成了一个自我实现的预言——一个页面返回到列表的顶部,因此它被访问的频率更高,从而得到更多的分数,因此它显示在列表的末尾,访问的频率更高,得到的分数也更多。。。。对这些评论给予更多的重视反映出这些评论需要付出真正的努力并显示出真正的兴趣
以上公式将根据所有时间统计为您提供排名。因此,如果一篇文章在过去一周内积累了与去年积累的另一篇文章相同数量的观点/评论,那么它将获得相同的优先级。重复这个公式可能是有意义的,每次都指定一个日期范围,并选择活动性较高的页面,例如
0.3*(score for views/comments today) - live data
0.3*(score for views/comments in the last week)
0.25*(score for views/comments in the last month)
0.15*(score for all views/comments, all time)
这将确保“热门”页面的优先级高于最近没有太多动作的类似评分页面。除了今天的分数之外,所有的值都可以通过预定的存储过程保存在表中,这样数据库就不必聚集许多注释/视图统计数据。只有今天的统计数据计算为“实时”。更进一步,排名公式本身可以通过每天运行的存储过程计算和存储历史数据
编辑:要获得从0.1到1.0的严格范围,可以像这样修改公式。但我强调-这只会增加开销,是不必要的-优先级的绝对值并不重要-只是它们相对于其他URL的相对值。搜索引擎用这些来回答这个问题,URL A比URL B更重要/相关吗?它通过比较他们的优先权(哪一个是最大的)而不是绝对值来实现这一点
//非规范化-x是某个页面id
un(x)=0.3*log(视图(x)+10)/log(10+maxViews())+
0.7*log(注释(x)+10)/log(10+maxComments())
//原始公式(现在为伪代码)
最大值将为1.0,最小值将从1.0开始,并随着更多视图/评论的发表而向下移动
我们将un(0)定义为最小值,即(在上述公式中,视图(x)和注释(x)均为0)
要获得从0.1到1.0的标准化公式,您需要计算n(x),即页面x
(1.0-un(x)) * (un(0)-0.1)
n(x) = un(x) - ------------------------- when un(0) != 1.0
1.0-un(0)
= 0.1 otherwise.
最简单的方法如下: 让
v[i]
页面i
的视图,c[i]
页面i
的注释数,然后定义要显示的页面i的相对视图权重
r_v(i) = v[i]/(sum_j v[j])
r_c(i) = c[i]/(sum_j c[j]).
其中sum_j v[j]
是所有页面上v[.]
的总和。类似地,定义页面i的相对注释权重
r_v(i) = v[i]/(sum_j v[j])
r_c(i) = c[i]/(sum_j c[j]).
现在需要一个常量参数p:0然后将优先级设置为
p*r_v(i) + (1-p)*r_c(i)
这可能过于简单化,但这可能是最好的起点 您在这里寻找的不是算法,而是公式 不幸的是,您还没有真正指定您想要的详细信息,因此我们无法向您提供公式 相反,让我们试着一起解决这个问题 您有两个传入参数,viewCount和commentCount。您想返回一个数字,优先级。到目前为止,一切顺利 你说优先级应该在0到1之间,但这并不重要。如果我们想得到一个我们喜欢的公式,但是得到的值在0到N之间,我们可以将结果除以N,所以这个约束实际上并不相关 现在,我们需要确定的第一件事是评论与视图的相对权重 如果页面A有100条评论和10个视图,而页面B有10条评论和100个视图,那么哪个优先级更高?或者,它应该是相同的优先级吗?你需要决定什么适合你对优先权的定义 例如,如果您认为注释的价值是视图的5倍,那么我们可以从以下公式开始
Priority = 5 * Comments + Views
显然,这可以推广到
Priority = A * Comments + B * Views
其中A和B是相对权重
但是,有时我们希望我们的权重是指数而不是线性的,比如
Priority = Comment ^ A + Views ^ B
这将给出一个与早期公式非常不同的曲线
同样地
Priority = Comment ^ A * Views ^ B
如果权重相等,则将为包含20条评论和20个视图的页面提供比包含1条评论和40个视图的页面更高的值
因此,总结一下:
你真的应该为视图和注释制作一个带有示例值的电子表格,然后使用各种公式,直到得到一个你所希望的分布
我们不能为你做这件事,因为我们不知道你想如何评价事物。几张海报基本上是在没有概念的情况下提倡什么