你好,我们又见面了
我想我已经知道该怎么做,但我不确定
我会直到你和你判断我计算pagerank的方式是否正确
首先,我在“pages”表中添加了一个新列,称为“outgoinglinks”,它包含该页面的输出链接数
我添加了另外两列“pagerank”和“pagerank2”
另一个名为“i”的列计算迭代次数
现在让我们开始编程
$step="pg";
for($i=0;$i<50;$i++){
if($step=="pg2"){
$step="pg";
}else{
$step="pg2";
}
$totalpages=5000;
$sql1 = "select id from pages";
$result1 = $DB->query($sql1);
while($row1 = $DB->fetch_array($result1)){
$page_id = $row1["id"];
$sql = "select * from links where to_page_id = '$page_id'";
$result = $DB->query($sql);
$weights_of_links=0;//sum of pageranks/number of outgoing links
while($row = $DB->fetch_array($result)){
$from_page_id = $row["from_page_id"];
$row2 = get_record_select("pages","id = '$from_page_id'");
$outgoinglinks = $row2["outgoinglinks"];
if($step=="pg2"){
$from_page_id_pagerank = $row2["pagerank2"];
}else{
$from_page_id_pagerank = $row2["pagerank"];
}
$weights_of_links +=($from_page_id_pagerank/$outgoinglinks );
}
//final step I tried to write the formula from wikipedia and the paper I have referred to
$pagerank = .15/$totalpages + .85*($weights_of_links);
//update the pagerank
$ii = $i+1;
if($step=="pg2"){
update_record("pages","id='$url_id'","pagerank='$pagerank',i='$ii'");
}else{
update_record("pages","id='$url_id'","pagerank2='$pagerank',i='$ii'");
}
}
}
笔记:
在开始之前,请确保将其中一个页面(任何页面)的 pagerank 设置为 1,并将其他页面保留为 0
为什么有两个 pageranks 列?
我这样做是因为我认为我们应该将每次迭代分开以进行准确的计算,以便我们的脚本将在这两列之间交替,每次迭代都会对其中一个页面排名列进行处理并将新结果保存到另一个页面排名列
之前的代码将循环多次以获得准确的结果,例如每次接近 50 次我们将更接近我们页面的真实页面排名
我的问题是,如果我的网络中所有 pagerank 的总和应该等于 1!如果是的话,谷歌如何给每个页面一个 10 分的排名?!
有任何想法吗?
谢谢