热词统计发现算法3则

来源:互联网 发布:淘宝默认头像 编辑:程序博客网 时间:2024/04/29 22:51
 84人阅读 评论(0) 收藏 举报

目录(?)[+]

转载于http://qing.blog.sina.com.cn/2090594487/7c9bf0b733001jsa.html

以搜索为例,点击类似。所有变换和简化须不影响排序结果。

排位变化

最初的算法参考电影排行榜,统计昨日Top词、前日Top词,然后计算每个词w两天的排位差,排位变化最大的就是最热的词。


排序取出取出排位前 N 的词语集合。

WZ为昨日搜索词TopN集合,WQ为前日搜索词TopN集合。

 

SortBySearchCount(WZ, Desc)

SortBySearchCount(WQ, Desc)

for each(w in WZ)

{

    if(w in WQ)

        PositionChange = Position( w,昨日) - Position( w,前日 )

    else

        PositionChange = Position( w,昨日) - ( N + 1 )

}

SortByPositionChange( WZ)

此算法比较笨,必需做三次排序,但是挑选出的词语效果还是比较好的。

注意,根据上述方法,词条这两天的排位差PositionChange 越小,表示其越火。PositionChange 可以为负值。

----------备注----------

举例:对于在集合WZ中的词条w,给出几种情况:

(1)假设词条w这两天比较火,即分别出现在昨天和前天的词条集合WZ和WQ中了,则

假设昨天拍在第3位,前天排在第5位,则该词条上升了两位。此时PositionChange = -2.

假设昨天拍在第5位,前天排在第3位,则该词条下降了两位。此时PositionChange = 2.

(2)假设词条w只在昨天的集合WZ中,但是不在前天的集合WQ中,则

假设昨天拍在第3位,又因为N = 100,则98位。此时PositionChange = -98.

又因为PositionChange 越小(-98<-2<2),表示其越火,根据排序,可以得到第三情况的词条最火。此时也符合实际情况。

变化率

算法很简单:今日次数/昨日次数,按照变化率排序即可。


WZ为昨日搜索词全集,WQ为前日搜索词全集。

CZ为昨日搜索总次数,CQ为前日搜索总次数。

Cz某词w昨日的次数,Cq某词w前日的次数

 

for each(w in WZ)

{

    if(w not in WQ) {

        Cq = 0

    }

    ChangeRate = (Cz+1)/(Cq+1) - 1

 }

SortByChangeRate(WZ, Desc)


算法很简单,但是哪些前日访问很少的词语,就很占便宜了。

加权变化率

加权变化率是对于算法2的修正,考虑搜索量因素,将搜索量较小的词语加权小,而对于搜索量大的词语加权大,平衡一下访问量因素。此处的权值取两天内此词总共的搜索次数在全部搜索次数中的比例。


WZ为昨日搜索词全集,WQ为前日搜索词全集。

CZ为昨日搜索总次数,CQ为前日搜索总次数。

Cz某词w昨日的次数,Cq某词w前日的次数

 

for each(w in WZ)

{

    if(w not in WQ) {

        Cq = 0

    }

    ChangeRate = (Cz+1) / (Cq+1) - 1

    Weight = (Cz+Cq) / (CZ+CQ)

    RateWithWeight = ChangeRate * Weight

}

SortByRateWithWeight (WZ, Desc)


因为我们只考虑排序,所以可以对词算法进一步简化


RateWithWeight = ChangeRate * Weight

= ( (Cz+1) / (Cq+1) - 1 ) * (Cz+Cq) / (CZ+CQ)= (Cz-Cq) * (Cz+Cq) / (Cq+1) / (CZ+CQ)

 

因为CZ、CQ对于两天内的所有值都是一样的,所以可以不计算,不影响最后的排序结果。

可以取简化后的

RateWithWeight = (Cz-Cq) * (Cz+Cq) / (Cq+1)

-------------------------------分割线------------------------------------

小结

方法一:排位差

算法思想:根据词语每天出现次数求出其排在老几,之后计算两天的排位差,根据排位差求热度。

具体步骤:

(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合

(2)对每一个词,计算每个词w两天的排位差

(3)根据词语的排位差进行排序,其中排位变化最大的就是最热的词。

评价:此算法比较笨,必需做三次排序,但是挑选出的词语效果还是比较好的。

方法二:变化率

算法思想:根据词语两天的出现次数求出其出现次数的比值,根据比值求出其热度。

具体步骤:

(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合

(2)对每一个词,计算每个词w两天的变化率,即今日次数/昨日次数。

(3)根据词语的变化率进行排序,其中变化率最大的就是最热的词。

评价:算法简单,但是对于访问次数少但变化率大的词语会占便宜。

方法三:加权变化率

算法思想:根据词语两天的出现次数其在总搜索次数的站的份额求出比值,根据比值求出其热度。

具体步骤:

(1)统计每一个词在昨天和前天出现的次数,并找出排位前 N 的词语集合

(2)对每一个词,计算每个词w两天的加权变化率,即(今日次数/昨日次数)* 该词这两天的总搜索次数在全部搜索次数中的比例。

(3)根据词语的加权变化率进行排序,其中加权变化率最大的就是最热的词。

评价:算法简单,弥补了变化率的缺点。

注意:求热词时,单纯比较每天词条的出现次数是不行的,重要的是比较多天之间的出现次数。

原创粉丝点击