到了这一步,这次的作业基本计算完成了。通过得到url的出入度信息,排出Top10的最重要页面。
在抓取过程中,我们创建了自己Extractor,然后又在BdbFrontier中修改了代码实现了出入度的文件保存,于是接下来只需对文件进行分析利用pageRank算法即可。
思路一:
这是最常规的方法,也是第一时间可以相处的方法,就是利用出度关系,直接构造一个邻接矩阵,读取矩阵之后进行
n
G= 0.85*L
T
+0.15/11(1
N
)
n
P
0
=(1/11,1/11,….)
T
n
P
1
=GP
0
迭代计算,直接动手实现。课堂上老师提到了Matlab,所以我们决定小试一下,Matlab由于其数据解围矩阵形式保存,所以处理矩阵会有很大优势。
所以代码中只是简单的调用Matlab的一些现成的函数即可轻松完成。代码极其简单
matrix
x=0.15
[line,row]=size(M)
P=ones(line,1)/line
i=0
E=ones(line,line)
while i<10
G=(1-x)*M.'+x*E/line
P=G*P
P=P/sum(P)
i=i+1
end
这里建设矩阵存在matrix.m文件中,直接循环计算。
貌似到这里已经很完美的解决了作业,问题出现了:ccer有近20000页面,存成矩阵的话就会有20000x20000个元素,简单计算一下生成的纯文本文件将会多达数G,计算的效率如何保证?
思路二:
由于一中存在的严重问题,自然而然的想到稀疏矩阵的表示,然而在Heritrix中,我们只保存了每个页面及其的出度,以及页面的列表,因此需要利用这两个文件构造出系数矩阵的表达形式。
具体操作可以有很多选择,为了提高效率我们选择了C++语言,具体实现此处不再赘述。
得到稀疏矩阵之后,就可以逐行对其进行操作,大大提高了效率。
结果数据仍在处理之中,稍后奉上。
P.S.首先感谢国家,然后感谢戴志伟童鞋,正是他对我们的数据量产生了质疑使得我们如梦初醒,蓦然回首,发现是在过于信任数学软件而忽略了数据本身的庞大,特此表示感谢。