首页 | DV动态 | 数码产品 | 视频采编 | 网站建设 |
【收藏DV】
  最近3月排行
·赤马劫
·985、211、双一流
·上了大学也没体面工作,我们是否还要上大学- 附一组数据
·许小年:碎片化信息让人变得无知,要少看手机多读书
·许小年:浅析日本失去的30年——兼评“资产负债表衰退”
·高中英语-单词表
·常用网管软件下载,持续更新中...
热文排行的算法进行了优化
2006/6/3 12:02:10
 

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

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

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

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

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

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

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

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

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

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

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

欢迎关注微信公众账号:手机烟台(mYantai)

 

  上一篇:浅谈TeeChart组件在ASP中的应用
  下一篇:装扮你的博客---和讯博客特效代码(必看)
      更多...
::打印本页 ::      ::关闭窗口::


版权所有© 数码在线网站 DV OnLine©  鲁ICP备12016322号-1