`

nutch 1.3 评分机制 opic 详解

阅读更多

Nutch 1.3 学习笔记 11-1 页面评分机制 OPIC
--------------------------------------
1. Nutch 1.3 的页面评分机制
   Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是作为Nutch中ScoreFilter扩展点的一个扩展来实现的,而新的LinkRank算法有一个叫做org.apache.nutch.scoring.webgraph的包来对网页进行分数计算,它可以解决OPIC解决不了的问题,一个是重复地抓取页面,会引起那些被抓取的页面重要性增加;另一个是同时新添加的页面必须进行抓取,这样会使整个网络的总cash流通量增加,这样会造成那些没有重复抓取的页面重要性降低。


2. 什么是OPIC算法及其特点
下面内容来自[http://www.endless-loops.com/2011/03/nutch%E6%BA%90%E7%A0%81%E4%B8%AD%E7%9A%84%E9%93%BE%E6%8E%A5%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95-497.html]

OPIC算法是针对静态图的。OPIC算法的基本思想是:每个页面都有一个初始的cash,在抓取某页面时,该页面的cash会平均地分配到其所接向的页面,总的整个网络图中总的cash量是个定值,在抓取网页的过程这些一定量的cash在页面之间流通,很直观地,OPIC算法中页面的重要性就定义为流通过程中流过该页面的cash的总量在总流通量中占的比重。

对于每个网面(图中的结点),OPIC算法维护两个值cash与history,cash是网页当前的cash值,history表示的则是该网页从OPIC算法开始到最后一次被抓取,获得的cash的总和。cash的初始值一般为1/n (n为网页总数),history初始值为0。


OPIC算法使用两个向量C[1,…,n] 和H[1,…,n]分别表示各个网页的cash值和history值,为了优化算法,还引入一个变量G,使每一次抓取网页时都有G=|H|=∑i H[i],原论文中OPIC算法的伪代码如下:
view plain
引用
OPIC: On-line Page Importance Computation for each i let C[i] := 1/n ; for each i let H[i] := 0 ; let G:=0 ; do forever begin choose some node i ; %% each node is selected %% infinitely often H[i] += C[i]; %% single disk access per page for each child j of i, do C[j] += C[i]/out[i]; %% Distribution of cash %% depends on L G += C[i]; C[i] := 0 ; end

OPIC算法的几个问题:
1.无外向链接的sink页面处理:
OPIC算法中有个虚拟网页 (virtual page)的概念,虚拟网页与所有网页之间都有双向链接。
2.收敛性:
OPIC算法将网页重要性的计算集成到了网页抓取的过程中,OPIC算法依赖于反复的抓取,一个重要的问题就是(*)式的值在页面反复抓取过程中是收敛的,只有确保这一点算法才是正确有意义的,关于收敛性的证明,原论文里有严密的证明,这里只提示一下。
3.抓取策略
上面提到OPIC算法依赖于反复抓取,那么抓取策略就是个重要问题了,抓取策略直接影响网面重要性(*)式的收敛速度,事实上,理论与实验都证明贪心法中是最好的策略,即优先抓取那些cash值高的页面。

为了解决OPIC算法的收敛性问题,后来有人提出了Adaptive OPIC算法,它主要引一个时间窗(time window)的概念,它的点主要在于将网页重要性的计算集成到网页抓取的过程中了,简化了模型,简化了网页重要性值的求解。

3. OPIC在NUTCH中的应用
   在Nutch1.3的源码org.apache.nutch.scoring.opic包OPICScoringFilter类的注释里提到Nutch实现的链接分析算法是基于《Adaptive On-Line Page Importance Computaion》。Nutch把它做为一个ScoringFilter插件来对付,也就是说用户可以扩展自已的分数算法,
   其中ParseOutputFormat是用来为计算分数做准备,而FetchOutputFormat中的RecordWriter集成了ParseOutputFormat,抓取解析后的网页都会通过ParseOutputFormat生成的RecordWriter写出去,而这个计算OPIC的方法就是在这个RecordWriter中调用的。


4. Nutch OPIC源代码分析
下面是OPICScoringFIlter的distributeScoreToOutlinks方法。源代码如下:
view plain
  float score = scoreInjected; //得到插入的分数,不过好像没用 
// 得到解析后初始化的分数,这个分数在FetchThread在对网页解析之前进行了设置 
// scfilters.passScoreBeforeParsing(key, datum, content); 
 
 
引用
String scoreString = parseData.getContentMeta().get(Nutch.SCORE_KEY); if (scoreString != null) { try { score = Float.parseFloat(scoreString); } catch (Exception e) { e.printStackTrace(LogUtil.getWarnStream(LOG)); } } // 得到有效的网页个数 int validCount = targets.size(); if (countFiltered) { score /= allCount; } else { if (validCount == 0) { // no outlinks to distribute score, so just return adjust return adjust; } score /= validCount; } // internal and external score factor float internalScore = score * internalScoreFactor; // 设置内链接的分数值,乘以一个内链接的权重因子,默认为1.0f float externalScore = score * externalScoreFactor; // 设置外链接的分数值,乘以一个外链接的权重因子,默认为1.0f for (Entry<Text, CrawlDatum> target : targets) { try { String toHost = new URL(target.getKey().toString()).getHost(); String fromHost = new URL(fromUrl.toString()).getHost(); if(toHost.equalsIgnoreCase(fromHost)){ target.getValue().setScore(internalScore); // 设置内链接的贡献值 } else { target.getValue().setScore(externalScore); // 设置外链接的贡献值 } } catch (MalformedURLException e) { e.printStackTrace(LogUtil.getWarnStream(LOG)); target.getValue().setScore(externalScore); } } // XXX (ab) no adjustment? I think this is contrary to the algorithm descr. // XXX in the paper, where page "loses" its score if it's distributed to // XXX linked pages... return adjust; }


5. 总结
   在网页抓取中,排序算法的好坏直接影响到搜索引擎出现的更新结果,特点是在聚焦爬虫中更是这样。可能在Nutch 2.0以后就不会用OPIC,而是使用新的评分功能,在org.apache.nutch.scoring.webgraph中可以发现。

6. 参考
[1] Fixing the OPIC algorithm in Nutch  http://wiki.apache.org/nutch/FixingOpicScoring
[2] Abiteboul et al., 2003  http://www2003.org/cdrom/papers/refereed/p007/p7-abiteboul.html
[3] http://www.endless-loops.com/2011/03/nutch%E6%BA%90%E7%A0%81%E4%B8%AD%E7%9A%84%E9%93%BE%E6%8E%A5%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95-497.html
[4] http://wiki.apache.org/nutch/FixingOpicScoring
0
1
分享到:
评论

相关推荐

    Nutch 1.3 学习笔记

    - **页面评分机制**:Nutch支持多种页面评分算法,如OPIC和LinkRank,这些机制有助于提高搜索结果的相关性和质量。学习笔记第11章提供了OPIC和LinkRank的具体实现细节。 - **Nutch 2.0的主要变化**:学习笔记的最后...

    nutch1.3在myclipse部署工程源码

    Nutch1.3是其一个稳定版本,提供了强大的爬虫功能和可扩展性。MyEclipse(这里误写为myclipse)是基于Eclipse的一款集成开发环境(IDE),尤其适合Java开发,支持多种Java应用的创建、调试和部署。本教程将详细介绍...

    Nutch1.3开发环境

    配置好的Nutch1.3开发环境,解压后直接导入Eclipse Workspace即可,调试通过,默认爬163两层,解决Eclipse3.6+版本无基于源码创建工程选项问题

    apache-nutch-1.3-src.tar.gz_nutch_nutch-1.3.tar.gz

    这个源码包 "apache-nutch-1.3-src.tar.gz" 和 "nutch-1.3.tar.gz" 包含了 Nutch 1.3 的源代码和编译后的二进制文件,对于开发者和研究者来说是非常有价值的资源。 **Nutch 概述** Nutch 是基于 Java 开发的,遵循 ...

    nutch-1.3源码

    Nutch-1.3 版本是该项目的一个稳定版本,主要由 Java 语言编写,提供了丰富的功能和良好的可扩展性。 在 Nutch-1.3 的源码中,我们可以深入理解其工作原理和核心组件。源码分析可以帮助我们掌握以下关键知识点: 1...

    apache-nutch-1.3

    Nutch是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步... Nutch目前最新的版本为version1.3。

    nutch的插件机制

    Nutch 插件机制是其核心功能之一,它允许开发者轻松地扩展Nutch的功能,以适应不同的数据处理需求。Nutch 是一个开源的网络爬虫项目,主要用于收集、索引和搜索互联网上的信息。通过插件机制,Nutch可以处理各种不同...

    Nutch插件机制

    ### Nutch插件机制详解 #### 一、引言 Nutch是一款开源的网络爬虫项目,能够自动抓取互联网上的网页并建立索引。为了提高系统的灵活性、可扩展性和可维护性,Nutch采用了插件化的设计思路,即通过一系列可插拔的...

    Nutch中文教程nutcher.zip

    nutcher 是 Apache Nutch 的中文教程,在... Nutch流程控制源码详解(bin/crawl中文注释版) Nutch教程——URLNormalizer源码详解 Nutch参数配置——http.content.limit 文档截图:

    搭建nutch web开发环境

    本教程将详细介绍如何搭建Nutch 1.2的Web开发环境,因为从Nutch 1.3版本开始,Web界面部分已被移除。 首先,我们需要理解Nutch的工作流程,它主要包括五个主要步骤:抓取、解析、索引、查询和排名。Nutch提供了强大...

    Nutch搜索引擎的页面排序修改方法研究.kdh

    Nutch是一个优秀的开放源代码的Web搜索引擎。虽然Nutch的页面排序方法比较合理,但是很多情况下仍然不能 满足需要。分析开源搜索引擎Nutch代码,研究了Nutch的页面排序方法。在Nutch原有的结构基础上提出了3种修改...

    Nutch的各项配置详解

    Nutch各个配置项的详细说明,非常详细的说明了每一项

    nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据

    6. **存储与检索**:Nutch 支持多种存储和检索机制,如Hadoop的HDFS(Hadoop Distributed File System)用于存储爬取的数据,Solr或Elasticsearch用于提供全文检索服务。 7. **配置与优化**:Nutch 的性能可以通过...

    nutch 初学文档教材

    1.3 nutch的目标..1 1.4 nutch VS lucene.....2 2. nutch的安装与配置.....3 2.1 JDK的安装与配置.3 2.2 nutch的安装与配置........5 2.3 tomcat的安装与配置......5 3. nutch初体验7 3.1 爬行企业内部网....7 3.1.1...

    nutch使用&Nutch;入门教程

    四、Nutch工作流详解 Nutch的工作流程包括多个步骤,如生成段(Segments)、迭代抓取(Fetch)、解析(Parse)、更新链接数据库(Update)、生成新的种子(Generate)、选择待抓取页面(Select)、重定向处理(Fetch...

Global site tag (gtag.js) - Google Analytics