第4关: 网页排序——PageRank算法

article/2025/9/25 20:13:09

要求:编写实现网页数据集PageRank算法的程序,对网页数据集进行处理得到网页权重排序。 ####相关知识 ######PageRank算法原理 1.基本思想: 如果网页T存在一个指向网页A的连接,则表明T的所有者认为A比较重要,从而把T的一部分重要性得分赋予A。这个重要性得分值为:PR(T)/L(T) 其中PR(T)为T的PageRank值,L(T)为T的出链数。则A的PageRank值为一系列类似于T的页面重要性得分值的累加。
即一个页面的得票数由所有链向它的页面的重要性来决定,到一个页面的超链接相当于对该页投一票。一个页面的PageRank是由所有链向它的页面(链入页面)的重要性经过递归算法得到的。一个有较多链入的页面会有较高的等级,相反如果一个页面没有任何链入页面,那么它没有等级。

 

2.PageRank简单计算: 假设一个由只有4个页面组成的集合:A,B,C和D。如图所示,如果所有页面都链向A,那么A的PR(PageRank)值将是B,C及D的和。

 

 

继续假设B也有链接到C,并且D也有链接到包括A的3个页面。一个页面不能投票2次。所以B给每个页面半票。以同样的逻辑,D投出的票只有三分之一算到了A的PageRank上。

 

换句话说,根据链出总数平分一个页面的PR值。

 

完整PageRank计算公式

由于存在一些出链为0不链接任何其他网页的网页,因此需要对 PageRank公式进行修正,即在简单公式的基础上增加了阻尼系数(damping factor)q, q一般取值q=0.85

 

更加准确的表达为:

 

P1,P2,...,Pn是被研究的页面,M(Pi)是Pi链入页面的数量,L(Pj)是Pj链出页面的数量,而N是所有页面的数量。PageRank值是一个特殊矩阵中的特征向量。这个特征向量为:

 

R是如下等式的一个解:

 

如果网页i有指向网页j的一个链接,则

 

否则=0.

 

PageRank计算过程

      PageRank 公式可以转换为求解

 

的值,  其中矩阵为 A = q  × P + ( 1 一 q) * 。 P 为概率转移矩阵,为 n  维的全 1 行. 则=

幂法计算过程如下: X  设任意一个初始向量, 即设置初始每个网页的 PageRank值均。一般为1。R = AX。

     while  (1){         if ( |X - R| < e)      return R;  //如果最后两次的结果近似或者相同,返回R else   {                 X =R;                R = AX; } }

MapReduce计算PageRank

上面的演算过程,采用矩阵相乘,不断迭代,直到迭代前后概率分布向量的值变化不大,一般迭代到30次以上就收敛了。真的的web结构的转移矩阵非常大,目前的网页数量已经超过100亿,转移矩阵是100亿*100亿的矩阵,直接按矩阵乘法的计算方法不可行,需要借助Map-Reduce的计算方式来解决

对于如下图所示的相互链接网页关系

 

可以利用转移矩阵进行表示。转移矩阵是一个多维的稀疏矩阵,把web图中的每一个网页及其链出的网页作为一行,这样第四节中的web图结构用如下方式表示:

1. A   B    C    D 2. B   A    D 3. C   C 4. D   B    C

可以看A有三条出链,分布指向A、B、C,实际上爬取的网页结构数据就是这样的。 1.Map阶段 Map操作的每一行,对所有出链发射当前网页概率值的1/k,k是当前网页的出链数,比如对第一行输出<B,1/3*1/4>,<C,1/3*1/4>,<D,1/3*1/4>; 2、Reduce阶段 Reduce操作收集网页id相同的值,累加并按权重计算,pj=a*(p1+p2+…Pm)+(1-a)*1/n,其中m是指向网页j的网页j数,n所有网页数。 思路就是这么简单,但是实践的时候,怎样在Map阶段知道当前行网页的概率值,需要一个单独的文件专门保存上一轮的概率分布值,先进行一次排序,让出链行与概率值按网页id出现在同一Mapper里面,整个流程如下:

 

  这样进行一次迭代相当于需要两次MapReduce,但第一次的MapReduce只是简单的排序,不需要任何操作,用java调用Hadoop的Streaming. ####编程要求 本关的编程任务是补全右侧代码片段中map和reduce函数中的代码,具体要求及说明如下:

  • 在主函数main中已初始化hadoop的系统设置,包括hadoop运行环境的连接。
  • 在main函数中,已经设置好了待处理文档路径(即input),在评测中设置了结果输出路径(即output),不要修改循环输出路径即可保证完成。
  • 在main函数中,已经声明了job对象,程序运行的工作调度已经设定好。
  • 原则上循环迭代次数越多越精准,但是为了保证平台资源,只允许运行5次迭代,多余过程被忽略无法展示,请勿增加循环次数
  • 本关只要求在map和reduce函数的指定区域进行代码编写,其他区域请勿改动。
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.StringTokenizer;
import java.util.Iterator;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;public class PageRank {public static class MyMapper   extends Mapper<Object, Text, Text, Text>{private Text id = new Text();public void map(Object key, Text value, Context context ) throws IOException, InterruptedException{String line = value.toString();
//判断是否为输入文件if(line.substring(0,1).matches("[0-9]{1}")){boolean flag = false;if(line.contains("_")){line = line.replace("_","");flag = true;}
//对输入文件进行处理String[] values = line.split("\t");Text t = new Text(values[0]);String[] vals = values[1].split(" ");String url="_";//保存url,用作下次计算double pr = 0;int i = 0;int num = 0;if(flag){i=2;pr=Double.valueOf(vals[1]);num=vals.length-2;}else{i=1;pr=Double.valueOf(vals[0]);num=vals.length-1;}for(;i<vals.length;i++){url=url+vals[i]+" ";id.set(vals[i]);Text prt = new Text(String.valueOf(pr/num));context.write(id,prt);}context.write(t,new Text(url));}}}public static class MyReducer  extends Reducer<Text,Text,Text,Text>{private Text result = new Text();private Double pr = new Double(0);public void reduce(Text key, Iterable<Text> values,  Context context  ) throws IOException, InterruptedException{double sum=0;String url="";//****请通过url判断否则是外链pr,作计算前预处理****//
/*********begin*********/for(Text val:values)  {  //发现_标记则表明是url,否则是外链pr,要参与计算  if(!val.toString().contains("_"))  {  sum=sum+Double.valueOf(val.toString());  }  else  {  url=val.toString();  }  }  pr=0.15+0.85*sum;  String str=String.format("%.3f",pr);  result.set(new Text(str+" "+url));  context.write(key,result);  /*********end**********/            //****请补全用完整PageRank计算公式计算输出过程,q取0.85****//
/*********begin*********//*********end**********/    }}public static void main(String[] args) throws Exception{String paths="file:///tmp/input/Wiki0";//输入文件路径,不要改动String path1=paths;String path2="";for(int i=1;i<=5;i++)//迭代5次{System.out.println("This is the "+i+"th job!");System.out.println("path1:"+path1);System.out.println("path2:"+path2);Configuration conf = new Configuration();Job job = new Job(conf, "PageRank");path2=paths+i;    job.setJarByClass(PageRank.class);job.setMapperClass(MyMapper.class);//****请为job设置Combiner类****//
/*********begin*********/
job.setCombinerClass(MyReducer.class); /*********end**********/                    job.setReducerClass(MyReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path(path1));FileOutputFormat.setOutputPath(job, new Path(path2));path1=path2;      job.waitForCompletion(true);System.out.println(i+"th end!");}} }


http://chatgpt.dhexx.cn/article/P1nulQ2o.shtml

相关文章

PageRank算法--从原理到实现

本文将介绍PageRank算法的相关内容&#xff0c;具体如下&#xff1a; 算法来源算法原理算法证明PR值计算方法 1 幂迭代法2 特征值法3 代数法 算法实现 1 基于迭代法的简单实现2 MapReduce实现 PageRank算法的缺点写在最后参考资料 1. 算法来源 这个要从搜索引擎的发展讲起。最…

PageRank算法原理与实现

正文共835个字&#xff0c;8张图&#xff0c;预计阅读时间6分钟。 1、PageRank 1.1.简介 PageRank&#xff0c;又称网页排名、谷歌左侧排名&#xff0c;是一种由搜索引擎根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c;以Google公司创办人…

PageRank算法原理及代码

本文内容出自帅器学习的课程内容&#xff0c;讲得原理清晰&#xff0c;概念深入&#xff0c;链接&#xff1a; PANKRANK算法视频 另有一篇知乎文章&#xff0c;PAGERANK讲得系统透彻&#xff0c;链接在此&#xff1a;关键词提取和摘要算法TextRank详解与实战 PAGERANK算法是一…

PageRank算法 -- 图算法

一、简述&#xff1a; PageRank算法是一个迭代求解算法&#xff0c;可以处理网页排名&#xff08;根据网页的重要性进行排序&#xff09;、社会影响力分析、文本摘要 等问题。 PageRank算法在1996年由Page和Brin提出 PageRank适用于解决用有向图表示的图数据 二、各节点重要性…

PageRank算法

一、算法原理&#xff1a; 1、如果一个网页被很多其他网页链接到的话说明这个网页比较重要&#xff0c;也就是PageRank值会相对较高 2、如果一个PageRank值很高的网页链接到一个其他的网页&#xff0c;那么被链接到的网页PageRank值也会相应提高。 例子&#xff1a; 如果一…

pagerank算法详解

目录 一、pagerank简介两个重要假设 二、pagerank算法公式定义计算演示矩阵化计算 三、存在的两个问题问题1.Dead Ends问题2.Spider Traps 一、pagerank简介 PageRank算法的基本想法是在有向图上定义一个随机游走模型&#xff0c;即一阶马尔可夫链&#xff0c;描述随机游走者沿…

整车CAN网络拓扑图

什么是智能硬件与ECU ? 何为智能硬件, 就是包含智能控制单元的硬件, 比如发动机, 发动机上有一块儿专门负责控制发动机进气量, 喷油量, 排气量的控制单元, 这块单元相当于发动机的大脑. 他具有信号发送, 信号接收, 参数存储等基本功能, 这个控制单元就是ECU. ECU(Electronic …

如何利用CANoe在两路CAN通道之间创建网关(gateway)

1 目的 利用CANoe在两路CAN通道之间创建一个网关&#xff0c;通过CAPL实现CAN1、CAN2通道间的报文转发&#xff0c;并进行故障注入测试&#xff08;通过改变某些信号的值&#xff09;。 &#xff08;本实例仅用于博主学习记录&#xff09; 2 步骤 创建一个两路通道&#xf…

CANoe-如何模拟CAN总线网关通信(满满都是细节)

网络上有不少的文章介绍使用canoe工具模拟网关把can1总线上的报文转发到can2上,那我为什么要写这篇文章呢?大家知道,我的文章不可能完全照搬别人的内容,肯定要夹带私货,有自己的理解的。所以我会从网关在can总线中的工作方式到所起的作用进行分析,学习如何在canoe中实现模…

CAN/CANopen转PROFINET网关TCO-151

型号&#xff1a;TCO-151 基本说明&#xff1a;TCO-151可实现 PROFINET网络与CANopen或CAN网络之间的数据通信。网关在PROFINET网络作为从站&#xff0c;CANopen端既可以做主站也可以做从站&#xff0c;CAN端支持CAN2.0A/CAN2.0B协议&#xff0c;支持对CAN帧进行过滤处理。 特…

CAN总线网关设备

南京来可电子科有限公司 CAN总线网关设备

嘴哥有料系列-can教程2:CAN网关及CAN信号转发机制

原文章&#xff1a;https://mp.weixin.qq.com/s/qbUcZngSDClx9Ll5aKvlLg 上节课, 我们讲到了CAN网关, 其实准确的说不能叫CAN网关, 应该叫网关或者汽车网关, 因为网关不仅处理CAN网络, 还处理LIN网络. 主要是为了配合本系列教程及区分于以太网网关, 所以才取名叫CAN网关. CAN…

CAN总线车联网透传云网关简介

车联网透传云网关 CANIOT-222W/G车联网透传云网关 功能说明 透传功能&#xff1a;串口透传、网口透传、CAN口透传 云端功能&#xff1a;设备管理、OTA升级、远程调试、远程监控 云平台 主要通过互联网&#xff08;2G/3G/4G&#xff09;将不同区域的车辆或工程机械接入共有…

CAN网关远程OTA升级方案详解(工程机械控制器远程升级)

CAN网关远程OTA升级方案详解 背景&#xff1b; 现今中国基建全面开花&#xff0c;工程车辆的需求量越来越大&#xff0c;工作环境也越来越复杂。工程车辆配置升级需求也越来越多&#xff0c;所需要的的工程师数量也越来越多&#xff0c;导致工程师数量严重不做&#xff0c;影响…

CAN云网关透传CANIOTCAN物联网云网关系列基本介绍

来可电子的CANIOT透传网关可以实现串口&#xff0c;网口和CAN口的远程数据传输。 CANIOT透传网关 实现的原理为网关通过4g或者WiFi连接到服务器&#xff0c;再由服务器将接收到的网关数据转发到网关配套的客户端上&#xff0c;客户端再通过对应的上位机软件将接收到的数据显示出…

【N32G457 】基于RT-Thread和N32G457的CAN网关

本文是RT-Thread用户xiere 原创发布&#xff0c;是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛&#xff0c;原文&#xff1a;https://club.rt-thread.org/ask/article/3422.html 基于RT-Thread系统和N32G457开发板开发的一款CAN网关&#xff1b;硬件部分由…

S32G CAN网关测试

canutils 使用 ./cansend can0 -e 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88发送默认ID为0x1的can标准帧&#xff0c;数据为0x11 22 33 44 55 66 77 88, 每次最大8个byte ./cansend can0 -i 0x800 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 -e-e 表示扩展帧&#xff0c;CAN_ID最…

汽车网络安全之——CAN网关测试

测试内容 本部分为网关测试标准整理而来。 1 硬件信息安全测试 网关硬件信息安全测试应按照下列流程及要求依次进行&#xff1a; a) 拆解被测样件设备外壳&#xff0c;取出PCB板&#xff0c;通过5倍率以上的光学放大镜&#xff0c;观察网关PCB板&#xff0c;检查PCB 板硬件是否…

can网关 candtu CANIOT系列车联网透传云网关

can网关 candtu CANIOT系列车联网透传云网关的功能介绍 1&#xff0c;主要功能&#xff1a;云端监控、远程调试及配置、程序上下载4G、WiFi、 以太网联网 CAN口、串口和网口透传 云平台私有化部署服务虚拟CAN口适配广泛。 2&#xff0c;应用介绍 透传网关支持串口/网口/CAN口同…

CAN网关/CAN信号转发机制/案例解析

其实准确的说不能叫CAN网关, 应该叫网关或者汽车网关, 因为网关不仅处理CAN网络, 还处理LIN网络. 主要是为了配合本系列教程及区分于以太网网关, 所以才取名叫CAN网关. CAN网关的外形结构 大概外形如上, 偶有差异, 大小如香烟烟盒, 有60,70多个PIN脚组成. 每个接线pin脚都有严…