我的Mysql数据库中有两个表
table1 包含我网络中的所有网页
| table1: (pages)|
|----------------|
| id | url |
|----------------|
table2有两个字段,分别是链接的源页面和链接的目的页面
|---------------------------|
|table2(links) |
|---------------------------|
|from_page_id | to_page_id|
|----------------------------
如何计算我的网络的网页排名
我找到了这篇文章here它解释了 PageRank 算法,但是很难用 PHP 编写他们的公式 + 我不擅长数学
谢谢
更新:
我的网络中有将近 5000 个页面
最佳答案
又嗨了
我想我已经想出了怎么做,但我不确定
我会等你和你判断我计算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 列?
我这样做是因为我认为我们应该将每次迭代分开以进行准确计算,这样我们的脚本将在这两列之间交替,每次迭代都会对其中一个页面排名列进行处理并将新结果保存到另一个pagerank列
前面的代码将循环多次以获得准确的结果,每次我们将接近页面的真实 pageranks 时,如 50 次
我的问题是,如果我的网络中所有 pagerank 的总和应该等于 1! 如果是的话,谷歌如何给每个页面一个满分 10 分的排名?!
有什么想法吗?
谢谢
关于php - 如何计算小型网络的 PageRank?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1469331/