惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
IT之家
IT之家
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
V
V2EX
Last Week in AI
Last Week in AI
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
F
Fortinet All Blogs
I
InfoQ
宝玉的分享
宝玉的分享
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog

月光博客

AI编程从零开始:环境配置到开发调试-月光博客 母亲被保健品诈骗-月光博客 向身体低头,向岁月妥协:我的高血压“还债日记” -月光博客 月光博客电子书:《信息安全指南》 谷歌发布2025年度搜索排行榜 中国2025社会热点大事记 2025年十大流行语发布 7天3次,骗子骗走我母亲95万元 “技术男”设三重安全墙,母亲95万存款还是被骗走了 电信诈骗后的复盘:母亲的95万元,是怎么从手机银行里消失的 母亲被电信诈骗95万元的全过程 阿根廷警察被谷歌街景相机拍到裸照 网信办开展“清朗·整治恶意挑动负面情绪问题”专项行动 翟欣欣敲诈勒索案一审获刑12年 《绝命毒师》影评:力工觉醒后的梭哈至死 《人工智能生成合成内容标识办法》正式施行 用AI分析你的财务信息 腾讯子公司实习HR怒怼求职者后被开除 OpenAI发布最强模型GPT-5,免费向所有用户开放 用AI解构你的日记 用AI分析你的游戏偏好 用AI分析你的观影偏好 用AI分析你的听歌偏好 《白鹿原》人物分析:乱世浮沉中的人性剖析 乌托邦的捷径:让AI治理“失败国家” 苹果AI的“路径错误”:为什么它在大模型时代掉队了? 《暗黑破坏神3》第35赛季开荒指南 我对特朗普的看法 欧·亨利十大经典小说鉴赏 HBO电视剧《最后生还者》第二季影评
热文排行的算法进行了优化
月光 · 2006-06-03 · via 月光博客

今天打算更改一下我的Blog的文章排行算法。

以前的算法是根据点击数目来排行,有很多不足的地方,比如没有考虑时间因素,没有考虑用户对其的推荐等因素,最近使用抓虾系统的时候,对抓虾的“热文排行”算法产生了兴趣,因此我也打算使用类似的排行来进行我的Blog的文章排行。

其中的积分算法是比较难确定的,我打算以文章浏览次数,评论次数,引用次数以及文章的日期来生成。把用户的评论数目作为推荐次数,文章的发表日期到今天的时间做为时间因素。

1条评论和100次浏览有相同积分。

1条Traceback等于2条评论的积分。评论和引用的增长是线性的。

浏览次数增大,取得的积分以开平方根的方式增长,即数字越大,变化越小。

文章的日期做为负积分,以指数方式增长,越老的文章,会变为越来越大的负数积分。

用数学算法表示即:log_CommNums*100 + log_TrackBackNums*200 + sqr(log_ViewNums)*10 - (date()-Log_PostTime)*(date()-Log_PostTime)

从这个算法中,引用和评论对积分的增加影响最大,时间因素对积分的减少影响最大。以这个算法产生的“热文排行”见左边,其每天会自动更新,我将观察一段时间,看看这个算法的效果如何。

具体的修改方法如下:

在c_system_event.asp中加入下面的函数:

'*********************************************************
' 目的:    重建排行
'*********************************************************
Function BlogReBuild_Toplist()

 Dim i
 Dim objRS
 Dim objStream
 Dim objArticle
 Dim strLogUrl

 Dim strPrevious
 Set objRS=objConn.Execute("SELECT [log_ID],[log_Url],[log_Title] FROM [blog_Article] WHERE [log_Level]>1 ORDER BY log_CommNums*100 + log_TrackBackNums*200 + sqr(log_ViewNums)*10 - (date()-Log_PostTime)*(date()-Log_PostTime) DESC")

 If (Not objRS.bof) And (Not objRS.eof) Then
  For i=1 to ZC_PREVIOUS_COUNT
   strLogUrl=objRS("log_Url")
   If IsNull(strLogUrl) Or IsEmpty(strLogUrl) Or strLogUrl="" Then
    strLogUrl=objRS("log_ID")
   End If
   strLogUrl=ZC_BLOG_HOST & ZC_STATIC_DIRECTORY & "/" & strLogUrl & "." & ZC_STATIC_TYPE
   strPrevious=strPrevious & "<li><a href="""& strLogUrl & """>" & objRS("log_Title") & "</a></li>"
   objRS.MoveNext
   If objRS.eof Then Exit For
  Next
 End If
 objRS.close

 strPrevious=TransferHTML(strPrevious,"[no-asp]")

 Set objStream = Server.CreateObject("ADODB.Stream")
 With objStream
 .Type = adTypeText
 .Mode = adModeReadWrite
 .Open
 .Charset = "utf-8"
 .Position = objStream.Size
 .WriteText = strPrevious
 .SaveToFile BlogPath & "/include/toplist.asp",adSaveCreateOverWrite
 .Close
 End With
 Set objStream = Nothing

 BlogReBuild_Toplist=True

End Function
'*********************************************************

然后在MakeBlogReBuild函数的BlogReBuild_Categorys后面加上一行BlogReBuild_Toplist。

修改c_html_js.asp,在f="TRACKBACKS"后面增加
 ElseIf f="toplist" Then
  f="TOPLIST"

修改single.html模板文件,在合适的位置增加下面几行。
<div class="function" id="divTopList">
<h3>热文排行</h3>
<ul>
<script language="JavaScript" src="<#ZC_BLOG_HOST#>c_html_js.asp?include=toplist" type="text/javascript"></script>
</ul>
</div>

最后,重建索引,重建文件,就完成了。

具体效果参见本页左边的“热文排行”栏目。

更新:在Z-BLOG 1.7下的修改方法

前面修改代码不变,之后,修改TEMPLATE\default.html模板,在适当位置加入以下语句:

<div class="function" id="divTopList">
<h3>热文排行</h3>
<ul>
<#CACHE_INCLUDE_TOPLIST#>
</ul>
</div>

修改TEMPLATE\single.html模板,在适当位置加入以下语句:

<div class="function" id="divTopList">
<h3>热文排行</h3>
<ul id="ulToplist">
<script language="JavaScript" type="text/javascript">strBatchInculde+="ulToplist=toplist,"</script>
</ul>
</div>

最后重建索引即可。

参考文章:抓虾指数的热文排行的产生

来源:http://www.zhuaxia.com/blog/?p=20

抓虾的热门文章是大家“顶”上来的。对于每篇文章,每个人有且仅有一票(包括我们虾米自己也一样,只有一票)。推荐出来的文章,按下面的规则排列顺序,希望能够兼顾文章的新鲜(按时间)和价值(按票数)。

1、两天之内推荐的文章,优先于超过两天的;

2、同样是两天之内推荐的文章,票数高的优先;

3、同样是两天之内,且同样票数的文章,最近被推荐过的优先。

也就是说,假如一篇文章在两天内无人继续推荐,估计大家对它的兴趣就不大了,或者说它有点“过时”了,它就应该被排在后边。

“两天”的窗口期是暂时拟定的,以后也许会调整。另外,每个人的那一票,以后的权重可能会不一样(比如,如果小虾推荐的文章总是被大家认可,那末小虾以后的推荐会更有分量。)总的想法,还是希望平衡文章的新鲜和价值。以后会加分类,搜索,和过滤功能,让大家更方便地看到自己喜爱的文章。
 

热文排行的算法进行了优化