herefree 发布的文章

下面解释下TrustRank算法

一、简介

搜索引擎在使用Page Rank算法计算网页排名的时候,非常依赖网络页面之间的链接关系,因此,链接的质量计算排名变得越来越重要。但是,有些网页采用作弊的行为来提升自己的排名,因此,一个良好的检测作弊网页的算法变得越来越重要。Google为了提高网站的检索质量,设计出了TrustRank算法来检测垃圾作弊网站。

Trust Rank算法基于了一个重要的观察的经验:好的页面很少指向坏的页面。这个概念是相当直观的,作弊页面是为了误导搜索引擎而被建立的,不能提供有效地信息。因此,人们创建可信赖的页面很少有原因指向作弊页面。

这个假设的发过来说是不成立的,即坏的页面很少指向好的页面,因为作弊网页为了提高网页的信任指数,通常会链接到许多的高质量的、权威的网站。

基于以上假设,挑选完全可以信赖的网站,将网站的TrustRank值设为最高,通过迭代运算将可信任值传播出去。也有一些可信赖的网站被欺骗链接到作弊网站,不过距离第一级网站越远信任值指数便会逐渐下降。这样通过TrustRank算法就可以对所有网站计算相应的信任值,信任孩子越高的网站可信赖信就越大。

二、公式实现

对于TrustRank算法来说,我们需要首先选取种子页面(即完全可以信赖的页面),然后在进行Trust Rank算法的计算。

TrustRank算法计算公式为:

20180706202113

其中α为衰减因子一般取值为0.80或0.85关系矩阵T的计算公式如下:QQ20180706202310

初始值r的公式为:

QQ20180706202428

d的公式为:

20180706202612

三、算法示例

我们首先设计一个网站链接关系图,圆代表不同的网站或网页,圆之间的箭头代表网站之间的链接关系:

201807062028

QQ20180706203132

然后依据以上公式迭代20次每次更新r值。

今天来讲一下搜索引擎的PageRank算法

一、算法介绍

早期的搜索引擎大都采用分类检索的方式,即靠人工辨别来对网站进行分类,类似hao123这样的网站。

随着时代的发展,网页变得越来越多,用人工识别的方式对网页进行识别变得越来越不现实,搜索引擎开始采用文本检索的方式来对返回用户所查询的信息,就是根据用户搜索的文本与网页内容的相关联程度来返回搜索的网站。但是这种方法的搜索结果不好,因为,有一些网站采用作弊的方式,在网页中添加许多关键词来提高自己的排名,在这种情况下,Google的两名创始人Larry Page与Sergey Brin开始对网页排序问题进行研究,依据学术界评判论文的重要程度的方法,查看论文引用次数,将这种方法用到了网页排序中,PageRank算法就产生了。

PageRank算法是最流行的基于链接的方法来确定页面的全局相关性或重要性。PageRank算法分配一个重要的分数比(页面排名),对于指向它的其他网页。一个页面的分数,由所有指向它的页面的分数来确定即一个页面的排名是由所有指向它的页面的重要性经过递归算法得到。一个页面如果有较多的链如页面便会有较高的等级,相反,如果一个页面没有任何链入页面,那么它没有等级。

二、公式实现

PageRank算法中页面p的得分可用r(p)来计算,计算公式如下:

20180630171951

其中是α衰减因子,一般取值0.8或0.85,outdegree(q)是页面q指向页面p的出度,N为页面的数量。

上面公式可简化如下:

20180630183008

初始化R的值均为1/N。

如果PageRank算法被执行在网站的链接结构上,每个网站会有一个全局重要性分数。如果网站被按照他们的PageRank算法分数从大到小排序,那些位于序列顶端的网站被认为是值得信赖的。在这些网站汇总标签为可信赖的网站被选作种子。

在上面的公式之中,我们能看出页面p的PageRank算法分数是由两个部分组成。一部分来自指向它的页面,另一部分来自其他所有页面的平均值。前者说明指向一个网页的重要网页越多这个页面就越重要。结果,PageRank算法高排名的页面都有很高的入度。

三、算法示例

我们首先设计一个简单的网络链接关系图,每个圆代表一个网站,然后圆之间的箭头代表网站之间的链接关系:

20180630202416

初始化:

20180630202531

通过公式20180630203523不断地迭代运算,最后得到结果R。

20180113163905

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" errorPage="../../error.jsp"%>

教研室   

姓名

导入教师  



导入excel文件有5列,顺序:职工号、姓名、教研室代码、职称代码、学位代码

实现修改操作是教职工号不可编辑,添加时教职工号可编辑功能
通过设置

var tt=$('#teachertb').datagrid('getColumnOption', 'tid');//得到此列
            tt.editor={};//设置此列不可编辑

新添一行

function appendtea(){//添加
    if (teaendEditing()){
        $('#teachertb').datagrid('appendRow'
        		,{});
        var tt=$('#teachertb').datagrid('getColumnOption','tid');// 得到此列,tid指的是列的field
        tt.editor={type:'validatebox', options: { required: true}};//设置此列可编辑
        
        teaeditIndex=$('#teachertb').datagrid('getRows').length-1;
        
        $('#teachertb').datagrid('selectRow', teaeditIndex)
        .datagrid('beginEdit', teaeditIndex);
       
    }
}

修改

function teaonClickRow(index){
    if (teaeditIndex != index){
        if (teaendEditing()){
        	var tt=$('#teachertb').datagrid('getColumnOption', 'tid');//得到此列
            tt.editor={};//设置此列不可编辑
            $('#teachertb').datagrid('selectRow', index)
                    .datagrid('beginEdit', index);
            teaeditIndex = index;
        } else {
            $('#teachertb').datagrid('selectRow', teaeditIndex);
        }
    }
}

效果2018011216075720180112160819

20180111211433
easyui有个可编辑下拉框,官网demo是只给了一个html的代码它是直接从url里获取json数据

产品编号 产品 市场价 成本价 描述 状态

但是在这里我们在这里使用不行,没法直接获取通过路径直接从后台获取(ps:此处我也不知为什么从后台获取的json,还需要eval下然后加载..)
然后我就想用在定义每行数据是用js写,然后一开始预加载先将下拉框数据加载进来,然后编辑是直接设置加载进来的数据。
html

得到初始化数据

var tdeptna;
	var tpostna;
	var tdegreena;
	$.ajaxSetup({async:false}); 
	//初始化时动态加载教研室列表
	$.getJSON("../SyscodeServlet?mode=getcodeByno&&codeno=jxdw",null,function call(data){   
       	if(data.errmsg!=""){
       		alert(data.errmsg);
       		return;
       	}
       	var tdept=eval(data.result);
       	
       
       	tdeptna=tdept;
       	
       	$("#tdeptid").combobox('loadData', tdept);//直接加载数据
       	
     });
	//加载职称
	$.getJSON("../SyscodeServlet?mode=getcodeByno&&codeno=zhch",null,function call(data){   
       	if(data.errmsg!=""){
       		alert(data.errmsg);
       		return;
       	}
       	var zhch=eval(data.result);
       	tpostna=zhch
       	
     });
	//加载学位
	$.getJSON("../SyscodeServlet?mode=getcodeByno&&codeno=xw",null,function call(data){   
       	if(data.errmsg!=""){
       		alert(data.errmsg);
       		return;
       	}
       	var xw=eval(data.result);
       	tdegreena=xw;
     });
	initTable(tdeptna,tpostna,tdegreena);

定义可编辑表单

function initTable(tdept,tpost,tdegree){
	$('#teachertb').datagrid({
		columns:[[
		          {title:'教职工编号',field:'tid',width:85},
		          {title:'姓名',field:'tname',width:80},
		          {
		        	  title:'教研室',
		        	  field:'tdeptname',
		        	  width:200,
		        	  formatter:function(value,row){
                          return row.tdeptname;
                      },
                      editor:{
                          type:'combobox',
                          options:{
                              valueField:'codeid',
                              textField:'codecontent',
                          
                              data:tdept,
                              required:true
                          }
                      }   
		          },
		          {
		        	  title:'职称',
		        	  field:'tpostname',
		        	  width:100,
		        	  formatter:function(value,row){
                          return row.tpostname;
                      },
                      editor:{
                          type:'combobox',
                          options:{
                              valueField:'codeid',
                              textField:'codecontent',
                          		heigh:100,
                              data:tpost,
                              required:true
                          }
                      }         
		          },
		          {
		        	  title:'学位',
		        	  field:'tdegreename',
		        	  width:100,
		        	  formatter:function(value,row){
                          return row.tdegreename;
                      },
                      editor:{
                          type:'combobox',
                          options:{
                              valueField:'codeid',
                              textField:'codecontent',
                          
                              data:tdegree,
                              required:true
                          }
                      }
		          }
		          ]]
	})
}

结束