2

我的 Mysql 数据库中有两个表

table1 有我网络中的所有网页

         | table1: (pages)|
         |----------------|
         | id   | url     |
         |----------------|

table2有两个字段,分别是链接的源页面和链接的目的页面

          |---------------------------|
          |table2(links)              |
          |---------------------------|
          |from_page_id   | to_page_id|
          |----------------------------

如何计算我的网络的页面排名

我在这里找到了这篇文章,它解释了 PageRank 算法,但是用 PHP 编写他们的公式非常困难 + 我不擅长数学

谢谢

更新:

我的网络中有近 5000 个页面

4

2 回答 2

1

你好,我们又见面了

我想我已经知道该怎么做,但我不确定

我会直到你和你判断我计算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 分的排名?!

有任何想法吗?

谢谢

于 2009-09-24T06:54:16.420 回答
0

如果那是您自己的网络,为什么还需要 PageRank?为什么不只计算从唯一页面到特定页面的链接总数并将此数字用作页面评级?

于 2009-09-24T06:23:44.140 回答