PageRank算法
(一) PageRank算法简介:
Google的创始人之一LarryPage于1998年提出了PageRank,并应用在Google搜索引擎的检索结果排序上,该技术也是Google早期的核心技术之一。
Larry Page是Google的创始首席执行官,2001年4月转任现职产品总裁。他目前仍与Eric Schmidt和Sergey Brin一起共同负责 Google的日常运作。他在斯坦福大学攻读计算机科学博士学位期间,遇到了Sergey Brin,他们于1998年合伙创立Google。
PageRank是一种在搜索引擎中根据网页之间相互的链接关系计算网页排名的技术。其级别从1到10级,PR值越高说明该网页越受欢迎(越重要)。PageRank近似于一个用户,是指在Internet上随机地单击链接将会到达特定网页的可能性。通常,能够从更多地方到达的网页更为重要,因此具有更高的PageRank。如果要查看此站点PageRank值,请安装GOOGLE工具条并启用PageRank特性,或者在firefox安装SearchStatus插件。
PageRank是基于从许多优质的网页链接过来的网页,必定还是优质网页的回归关系,来判定所有网页的重要性。(也就是说,一个人朋友圈中的人很优秀,他优秀的概率就越大,所以,多和优秀的人交往,你也变优秀了,不是吗?)
优点:
完全独立于查询,只依赖于网页链接结构,可以离线计算。
缺点:
1) PageRank 算法忽略了网页搜索的时效性。
2) 没有过滤广告链接和功能链接(例如常见的分享功能)。通常没有什么实际价值,前者链接到广告页面,后者常常链接到某个社交网站首页。
3)旧网页排序很高,存在时间长,积累了大量的 in-links,拥有最新资讯的新网页排名却很低,因为它们几乎没有 in-links。尽管这样,也为用户提供了友好的搜索体验。
(二)PageRank算法实现步骤:
# -*- coding: utf-8 -*-
from __future__ import division
T = 0.000000001
page_rank = [1.5, 1, 0.5, 0.5, 1.5]
page_links = [[0, 1, 1, 0,0],
[1, 0, 1, 0, 1],
[1, 1, 0, 1, 1],
[0, 0, 1, 0, 1],
[0, 1, 1, 1, 0]]
weights = []
for page_link in page_links:
link_sum = sum(page_link)
page_weight = []
for page in page_link:
if page == 1:
page_weight.append(1/link_sum)
else:
page_weight.append(0)
weights.append(page_weight)
while True:
page_rank_out =len(page_rank) * [0]
for page_rank_now,page_weight_out in zip(page_rank, weights):
page_rank_now_out =map(lambda x: page_rank_now * x, page_weight_out)
page_rank_out = map(lambda x: sum(x), zip(page_rank_out,page_rank_now_out))
check_stable = True
for rank, rank_out inzip(page_rank, page_rank_out):
if rank - rank_out>= T:
check_stable =False
if check_stable:
break
page_rank = page_rank_out
print(page_rank)