Lucene基本相关度算法与网上流传的针对web的改进算法

1.Lucene的Score计算公式:

coord(q,d): 文档d中,q中命中的项数除以查询q的项总数

queryNorm(q): 只在不同query比较时影响score的normalizing因素


tf(t in d):单文本词汇频率,t在文档d中出现的次数除以d中所有的项总数的平方根

idf(t):逆文本频率指数,log(numDocs/docFreq+1)+1.0

If the document has multiple fields with the same name, all their boosts are multiplied together

比如:

doc: 1,000,000

q: term1 term2 term3

doc1: 200terms, 2个t1,1个t2,0个t3

t1: 在100个doc中出现

t2: 在50个doc中出现

t3: 在200个doc中出现

2/200 * (sqrt(2/200)*(1+log(1000000/(100+1))/

要点:

查询词在一个 Document 中的位置并不重要。

如果一个 Document 中含有该查询词的次数越多,该得分越高。

一个命中document中,如果除了该查询词之外,其他的词越多,该得分越少。

不足:

查询精确度不好。

没有体现网页的重要性。

Lucene的得分算法, 不适合网页搜索。

2.网上流传的针对Web的改进的算法:

Score_d = k1 * OldScore + k2 * PrScore + k3 * ReScore + k4 * homePageScore

注:

Score_d: 记录d的得分。

OldScore: 由基础排序算法计算出的记录d的得分。

PrScore: 记录d的PageRank的得分。

ReScore: 记录d的二次检索的加分, ReScore = rescore + (hitNum – 1) * increment

homePageScore: 主页的加分

K1, K2, K3, K4为权重系数

PR(A) = (1 − d)/N + d(PR(T1)/C(T1) + … + PR(Tn)/C(Tn))

–         PR(A) 页面A的PageRank

–         PR(Ti) 超链接到页面A的Ti页面的PageRank

–         C(Ti) 页面Ti的链向其它页面的超链接数

–         d 阻尼系数(0,1之间)

–         N 所有网页的总数

计算Pagerank的步骤如下:

1)所有网页的Pagerank得分值都赋初始值

2)遍历网页数据库。对于每一个页面,通过查找链接数据库,得到当前页面所有的链出页面。再将当前页面的Pagerank得分值平分给每个链出的页面。

3)重复步骤2,迭代多次,直至收敛。

在结果中检索又称为二次检索。 是在当前检索结果内进行的检索,主要作用是进一步精选文献。当检索结果太多,想从中精选出一部分时,可使用二次检索。

hitNum是网页点击数

increment是该单词每多出现一次所增加的“分数”

另外,对于网页,term属于某些标签内应该也加以权重,如加黑的,图片上方或者下方的,title内的,标题元素等,对于普通文档,term包含在标题,摘要内的,或文档开头的也应有加分。可以通过setBoost完成

发表评论

邮箱地址不会被公开。