2

Mysqlデータベースに2つのテーブルがあります

table1 にはネットワーク内のすべての Web ページがあります

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

table2 には、リンクのソース ページとリンク先ページの 2 つのフィールドがあります。

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

ネットワークのページランクを計算する方法

この記事を見つけましたここでは、PageRank アルゴリズムについて説明していますが、PHP で数式を記述するのは非常に困難です + 数学が苦手です

ありがとう

アップデート:

ネットワークには約 5000 ページあります

4

2 に答える 2

1

また会ったね

私はそれを行う方法を理解したと思いますが、よくわかりません

ページランクの計算方法が正しいかどうかは、あなたとあなたが判断するまでお待ちください

最初に、「ページ」テーブルに「outgoinglinks」と呼ばれる新しい列を追加しました。これには、そのページからの発信リンクの数があります

さらに「pagerank」と「pagerank2」の 2 つの列を追加しました。

反復回数をカウントする「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 のままにしてください。

なぜページランク列が 2 つあるのですか?

これを行ったのは、正確な計算を行うためにすべての反復を分離する必要があると考えているためです。これにより、スクリプトはこれらの 2 つの列を交互に使用し、すべての反復でページ ランク列の 1 つの処理が行われ、新しい結果がもう一方のページランク列に保存されます。

前のコードは何度もループして、ページの実際のページランクに近づくたびに 50 回などの正確な結果を取得します。

私の質問は、ネットワーク内のすべてのページランクの合計が 1 になるかどうかです! はいの場合、Googleはどのようにしてすべてのページに10段階のランクを付けていますか?!

何か案は?

ありがとう

于 2009-09-24T06:54:16.420 に答える
0

自分のネットワークなら、なぜ正確に P​​ageRank が必要なのですか? ユニークなページから特定のページへのリンクの総数を計算し、この数をページの評価として使用しないのはなぜですか?

于 2009-09-24T06:23:44.140 に答える