我的Mysql数据库中有两个表格
table1拥有我网络中的所有网页
| table1: (pages)|
|----------------|
| id | url |
|----------------|
table2有两个字段,分别是链接的源页面和链接的目标页面
|---------------------------|
|table2(links) |
|---------------------------|
|from_page_id | to_page_id|
|----------------------------
如何计算网络的网页排名
我发现这篇文章here它解释了PageRank算法,但很难用PHP编写他们的公式+我不擅长数学
由于
我的网络中有近5000页
答案 0 :(得分:1)
HI再次
我想我已经想出了怎么做但我不确定
我会告诉你,你判断我的计算方式是否正确
首先我在“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列?
我之所以这样做,是因为我认为我们应该将每次迭代分开以进行准确的计算,因此我们的脚本将在这两列之间交替,每次迭代都会对其中一个页面排列进行处理并将新结果保存到另一列pagerank专栏
以前的代码会循环多次,以便每次我们接近页面的真实页面时获得50次精确结果
我的问题是,如果我网络中所有页面的总和应该等于1! 如果是,google如何为每一页提供10个排名?
任何想法?
由于
答案 1 :(得分:0)
如果那是你自己的网络,为什么你需要确切的PageRank?为什么不只是计算从唯一页面到特定页面的链接总数,并将此数字用作页面评级?