`

nutch 评分机制

 
阅读更多


其实nutch的评分机制有二部分,与通常的SE类似:

1。keywords匹配度

比如利用了lucene的similary机制,要索引和查询时均可定制。

 

2。page rank

这里有二个,

一是LinkAanlyzeScoring,作通常连接分析,但基本上都没有方法实现;不知道是否是opic的一个早期版本?

 

二是opic,即on-line importance computatioin。

这个与google的PageRanK是不同的,后者是off-line,可以说大大的不同。

包括inject,fetch,update,index等过程的score处理均在这样实现。

 

注意nutch使用的是一个varient of opic,所以其实它也不是严格按照其中的page所说来死套。

其中完整的opic代码如下 :

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
 

 

为什么pr这么重要呢?因为你搜索的上的就是找到合适,有用,规范的东西,或者说是high quality。这就是出发点,那么就有需要有机制去决策page的importance标准。其中质量高的pages不但要更新频繁些,就算在crawl阶段也要优先于是其它new discovered pages;再都就是搜索时更应该优先显示了。

当然百度也有自己的核心算法,所谓链接质量分析(李彦宏),不过觉得些东西大体上是类似的。自从很多论文,开源技术出来后大家也在模仿,说不定李彦宏也是模仿了xxx罢了!


最后还是来看看具体调用那些方法的地方,以便有问题时易于定位:

(注意QueryFilters是对具体的方法进行了代理,所以进入它分析即可)

一。injectedScore(url,datum)

>Injector.InjectorMapper中调用.注意这里是seed urls处理的地方。

如果url(per line in plain text)中没有指定score,则使用默认的1处理;

>FreeGenerator.FG(mapper)。当不需要首先添加到crawldb中而要生成fetchlist时使用。后续可能用到

 

filters:两者均无实现

 

二。generatorSortValue(url,datum,sort)

>Generator.Selector.map()。sort=1作为initSort,直接将inject的输出交给fitlers来处理

filters:两者均以datum.getScore() * sort。这样在输出时<sortvalue,datum>就产生了。

 

三。initialScore(url,datum) 对于新发现的urls設定 

>FetcherThread.run() / handleRedirect() 。感觉就是在重定向时的设置?

>ParserOutputFormat.RecordWriter.write() 。(还是处于Fetcher阶段)它输出包括crawl_parse,parse_data,parse_data文件。

处理:将targetUrl置为status_link的datum.

>CrawlDbReducer 这是在crawldb update phase ,将新旧urls(包括crawldb/current,crawl_parse,crawl_fetch中的crawldatum)进行合并和状态更新。

处理:当状态为STATUS_LINKED才进行调用。

 

filters:均以设置为0(说是inlink的score会设置它)

 

passScoreBeforeParsing(Text url, CrawlDatum datum, Content content)   copy score from datum to content for both filters.

>Fetcher.output()  在parsing一个页面的content前调用

>ArcSegmentCreator  同上

 

passScoreAfterParsing(Text url, Content content, Parse parse)  copy score from content to parse for both filters.

>Fetcher.output()  在parsing一个页面的content后逐个url调用

>ArcSegmentCreator  同上

>ParseSegment.map()  在crawldb udpate前若需要parsing时调用;功能与fetcher.output()中一样

 

distributeScoreToOutlinks()  与updateDbScore()相对,将当前url 的crawl score分发所有outlinks。这过程应该先于updateDbScore()调用,因为理论上应该是先发现再被其它urls来update d。注意这里考虑了内链和外链的分开处理问题。

>ParserOutputFormat.RecordWriter.write() 。(还是处于Fetcher阶段 )在其中的initiateScore()后调用

 

updateDbScore(Text url, CrawlDatum old, CrawlDatum datum, List<CrawlDatum> inlinked)

OPICScoringFilter.java:

float adjust = 0.0f;
    //在已经存放的datum(url)的情况下,对所有后来的入链汇总scores到datum中
    for (int i = 0; i < inlinked.size(); i++) {
      CrawlDatum linked = (CrawlDatum)inlinked.get(i);
      adjust += linked.getScore();
    }
    if (old == null) old = datum;
    datum.setScore(old.getScore() + adjust);

>CrawlDbReducer.reduce()  在其中的initiateScore()后调用

 

indexerScore(Text, NutchDocument, dbDatum, fetchDatum, Parse, Inlinks, initScore)   将dbdatum中的score衰减,即power计算,然后再由initScore加权

>Indexer.index()  -> IndexMapReduce.reduce()

 

 

 

 

references:

fixing opic scoring

opic in nutch

adaptive on-line page importance computation

nutch 源码分析

 

分享到:
评论

相关推荐

    nutch-1.5.1源码

    这部分源码涉及到查询解析、评分算法(如TF-IDF)和结果排序。 5. **分布式计算(Distributed Computing)**:Nutch充分利用了Hadoop的数据处理框架,将大型数据集的处理任务分布到多台机器上,实现了并行计算。...

    Lucene nutch 搜索引擎 开发 实例 源码

    对于初学者来说,详细注释的示例代码提供了很好的学习资源,有助于理解Lucene和Nutch的内部工作机制。同时,实战经验将使开发者具备构建自定义搜索引擎的能力,为大数据时代的信息检索提供强大的工具。

    Nutch 1.3 学习笔记

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

    lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档

    通过Nutch的爬取和预处理,以及Lucene的索引和查询机制,我们可以快速定位到包含目标关键词的文档,这对于信息检索和数据分析有着广泛的应用价值。对于开发者来说,深入理解这两个工具的工作原理和使用方法,将有助...

    apache-nutch-2.1

    - **评分**:使用链接分析算法(如 PageRank)对页面进行评分。 - **索引**:将处理后的页面存入索引库。 - **重复检测**:通过比较新抓取的 URL 与已存在的 URL,防止重复抓取。 8. **搜索功能**: Nutch 不仅...

    Lucene+nutch开发自己的搜索引擎 part2

    5. **评分机制(Scoring)**:Lucene通过TF-IDF算法和其他相关性计算方法,为搜索结果排序,最相关的文档优先展示。 6. **内存缓存与磁盘存储**:Lucene优化了内存和磁盘的使用,允许快速读取索引,同时保持索引的...

    Lucene2.0+Nutch0.8 API帮助文档(CHM格式)

    3. **索引和搜索**:Lucene的倒排索引原理、查询执行过程、评分机制以及相关性排名等核心概念。 4. **文本处理**:包括分词、去除停用词、词干提取等文本预处理技术,这些都是提高搜索质量的关键步骤。 5. **性能...

    基于Nutch的Web网站定向

    相比其他几种常见的Web抓取开源软件(如Web-Harvest、WCT、Heritrix),Nutch在抓取过程管理、网页评分、链接解析、内容解析、搜索功能、内容索引功能以及抓取内容完整性等方面表现出色,尤其是在内容索引功能方面,...

    nutch定向采集

    基于Nutch的Web网站定向采集系统,通过精准的种子站点选取、高效的抓取过程管理、有效的网页去噪和智能的新种子站点发现机制,能够在保证数据质量的同时,显著提升抓取效率。该系统为科学研究、数据分析和信息检索等...

    lucene+nutch搜索引擎光盘源码(1-8章)

    第三章则可能涉及到查询处理,包括如何构建查询对象,执行查询,以及如何使用评分机制来排序搜索结果。此外,还会学习到布尔查询、短语查询、近似查询等不同类型的查询构造。 第四章和第五章可能涵盖更高级的主题,...

    lucene+nutch开发自己的搜索引擎一书源代码

    - Lucenechapter4和Lucenechapter5:深入讨论了Lucene的查询机制,包括查询解析、评分系统和结果排序。读者将学会如何构造复杂的查询表达式,以及如何调整搜索结果的相关性。 4. **高级特性** - Lucenechapter6至...

    sek:一个类似 Nutch 的, 基于 Hadoop 的并行式爬虫框架

    简介Sek - 一个类似 Nutch 的, 基于 Hadoop 的并行式爬虫框架.当前尚处于构思阶段.构思如下:日志功能.参数的可配置.设置种子 URL 时可以进行必要的配置, 如评分, 定义抓取间隔等.基于 正则表达式 的 URL 过滤.URL ...

    大数据技术文档27.docx

    - **强大的插件机制**:通过Nutch插件机制,可以根据不同需求灵活定制抓取和解析规则,提高系统使用性和开发效率。 3. **Solr的作用** - **分布式索引**:Solr集群能够在多台机器上并行执行,提高检索速度。 - *...

    大数据技术文档.docx

    nutch是一个开源的网络爬虫项目,不仅能够抓取网页,还能解析网页内容、建立链接数据库、对网页进行评分,并创建solr索引。nutch的插件机制增强了其灵活性和可维护性,允许开发者根据需求定制抓取和解析规则,从而...

Global site tag (gtag.js) - Google Analytics