`

Nutch中creativecommons插件的分析

阅读更多

Cretivecommons插件的主要作用是从抓取的网页中提取一些特定的或者我们自定义的一些信息(这里的信息必须符合cc机制),为这些信息建立索引,提供查询的功能.举个例子:比如我们正在爬行某招聘网站的网页,我们对某一招聘信息的职位描述感兴趣,那么我们就可以扩展这一插件,筛取出此网页职位描述的信息,建立此网页新Field(Lunene的Document),入索引库.等待查询或者进行别的操作.

   为了达到目标,creativecommons plugin扩展3个不同的扩展点,它们是:
HTMLParser:从meta-tags得到推荐的terms
IndexingFilter:增加一个推荐Field在索引中。
QueryFilter:增加对索引中新Field的查询能力.
插件中一些概念的说明:
creative commons:(创作共用) 是网络上的数字作品(文学、美术、音乐等)许可授权机制,它致力于让任何创造性作品都
有机会被更多人分享和再创造,共同促进人类知识作品在其生命周期内产生最大价值。Nutch引入这个机制是为了在所索引的网页
使用创作公用这个授权机制,对所索引到的内容进行知识保护,这不但能对资源提供者的知识进行保护,也能促进知识资源的良性传播,
 

插件的代码分析:

creativecommons插件包括以下四个文件:

CCIndexingFilter:实现了IndexingFilter这个接口

CCParseFilter:实现了HTMLParser这个接口

CCQueryyFilter:实现了QueryFilter这个接口

CCDeleteUnlicnese:删除那些没有在Nutch的creativecommons授权机制中定义的元素

 

 

一:

CCIndexingFilter代码分析:

核心方法:

public Document filter(Document doc, Parse parse, UTF8 url, CrawlDatum datum, Inlinks inlinks)

此方法是对基类Indexingfiler中的filter的重写,它接收了某网页已经形成的Document,从分析部件对该网页的分析结果Parse中抽取所要索引的信息,为其建立新的lucene field,然后加入Documet中.

参数:

Document    Lucene中的Document,详情请见:http://www.lucene.com.cn/lucene.htm

Parse:是个接口,这里代表的是对一个网页原始内容(html流)分析的结果,详细分析请见:http://www.cnblogs.com/abob/archive/2006/10/19/534...

UTF8:以utf-8编码的url

CrawlDatum:描述了Fetcher在抓取网页时的状态,详情请见Fetcher的分析http://www.cnblogs.com/abob/archive/2006/10/19/534...

Inlinks:这里面存储了inlink的列表,inlink是一个网页中包含的链接.详情请见crawl的分析

方法实现:

Metadata metadata = parse.getData().getParseMeta();

这句代码是从分析结果Parse中获得一个metadata,这个metadata对象,包括了是一个内容丰富的容器,也是一个分析信息结构的语法.详情请见http://www.cnblogs.com/abob/archive/2006/10/20/534....,得到的这个metadata对象里包括了该被分析的页面中的所有信息.

 

以下的代码是将所要索引的信息,利用CreativeCommons中的字段声明从metadata对象中提取出来,然后添加到Document中.比如第一个我们要处理的是Licneseurl,首先通过代码

String licenseUrl = metadata.get(CreativeCommons.LICENSE_URL);

提取信息,然后判断是否为空,写入日志,
if (licenseUrl != null) {
if (LOG.isInfoEnabled()) {
LOG.info("CC: indexing " + licenseUrl + " for: " + url.toString());
}

添加到lucene的Document中.

// add the entire license as cc:license=xxx
addFeature(doc, "license=" + licenseUrl);

// index license attributes extracted of the license url
addUrlFeatures(doc, licenseUrl);
}

以下关于license location同理可得:

// index the license location as cc:meta=xxx
String licenseLocation = metadata.get(CreativeCommons.LICENSE_LOCATION);
if (licenseLocation != null) {
addFeature(doc, "meta=" + licenseLocation);
}

// index the work type cc:type=xxx
String workType = metadata.get(CreativeCommons.WORK_TYPE);
if (workType != null) {
addFeature(doc, workType);
}

返回已经修改好得Document.

return doc;

 

以上就是对CCIndexingFilter核心代码得基本分析.

 

从一我们知道了如何从Parse中筛选出我们想要特别添加的metadata,向lucnene的索引文档Document中添加新的Field.这

里面牵扯到了CC授权机制,其实在整个creativecommons插件中,针对的就是经过creative commons声明的元素.为什么叫这个插件的名字,也就是这个道理了.下面我们要研究的是怎么向Parse添加符合CC授权机制的metadata.

二:

CCParseFilter的代码分析

内部元素和核心方法:

Walker:静态的内部类,主要作用是通过遍历某网页的DOM树,寻找内容中的RDF和节点中Licenses.

WORK_TYPE_NAMES:针对worktype的哈希表.

filter方法:实现了HTMLParseFilter的方法.下面有介绍.这里主要调用了Walker.walk.

首先我们了解一个接口 HtmlParseFilter,请见package org.apache.nutch.parse,在以后的代码分析中也会对它有所介绍.

这个接口是对以DOM树为基础的HTML文档的分析器的扩展点,它允许你向这个HTMLParsers添加metadata.而这里为添加符合CC授权机制的metadata.


public interface HtmlParseFilter extends Pluggable, Configurable {
/** 扩展点的名字 */
final static String X_POINT_ID = HtmlParseFilter.class.getName();

/** 根据一个网页的DOM树,通过此函数对其HTML流的分析结果添加metadata,或者进行修改 */
Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc);
}

下面我们看类内部的元素:

对于Walker这个静态的内部类,是整个模块代码的核心,如果我们要完成向其添加新metadata的任务,也是要扩展这个类,这个插件要扩展的三个metadata是:CreativeCommons.LICENSE_URL    CreativeCommons_LOCATION    CreativeCommons_WORKTYPE.    Walker的核心方法private void walk(Node node) ,完成了对DOM树的遍历,并找到相关的元素;

下面我们看Filter这个核心方法

public Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc)

参数:

Content:此类是Nutch一个重要的数据结构,从通过Socket得到某网页的html包,加工成content,再到整个分析,索引的过程都与这个数据结构的操作有密切关系,在分析Protocol的时候还会对这个类做详细论述,这里大家要理解这也是个类似与MetaData一样,是一个内容丰富的容器.

Content的主要字段:

private byte version;
private String url;
private String base;
private byte[] content;
private String contentType;
private Metadata metadata;
private boolean mimeTypeMagic;
private MimeTypes mimeTypes;

Parse:是个接口,这里代表的是对一个网页原始内容(html流)分析的结果,详细分析请见:http://www.cnblogs.com/abob/archive/2006/10/19/534...

HTMLMetaTags:这个类存储了一些从该被分析的网页中提取的HTML meta信息,为了易于访问,这个类里面定义了一些类似与属性操作德函数.

DocumentFragment: 是“轻量级”或“最小”Document 对象。希望能够提取文档树的一部分或创建文档的新片段是很常见的。设想实现像剪切这样的用户命令或通过来回移动片段重新安排文档。需要有一个可以保存此类片段的对象,很自然出于此目要使用一个 Node。当 Document 对象真正可以完成此职责时,Document 对象可能为重量级对象,具体取决于基础实现。此操作真正需要的是非常轻量级的对象。DocumentFragment 就是这样的对象。

以上是对cc插件的基本介绍,关于后两个CCQueryyFilter:  CCDeleteUnlicnese:文件,我们不再叙述,因为有以上的知识,理解就很容易了.

分享到:
评论

相关推荐

    Nutch中文分词插件的编写与配置

    Nutch中文分词插件的编写与配置,由于Internet的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。 Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行...

    nutch的插件机制

    要使用Nutch插件,开发者需要在`conf/nutch-site.xml`配置文件中添加插件的名称到`plugin.includes`列表中。每个插件都有一个`plugin.xml`文件,用于描述插件信息,以及一个`build.xml`文件,指导Ant构建工具如何...

    Nutch_插件深入研究

    通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求开发和集成插件。 #### 五、在Eclipse中使用Ant构建插件 虽然Nutch插件可以通过命令行工具构建,但在Eclipse中使用...

    Nutch插件机制

    4. **集成插件**:在`nutch-site.xml`中添加该插件,确保Nutch能够识别并加载它。 5. **测试与调试**:测试插件的功能是否正常,调试可能出现的问题。 #### 六、结论 Nutch的插件机制极大地提高了系统的灵活性和...

    基于Nutch 的插件系统的原理分析

    ### 基于Nutch的插件系统的原理分析 #### 一、引言 随着互联网技术的迅猛发展,搜索引擎作为信息检索的重要工具,在日常生活及工作中扮演着越来越重要的角色。然而,传统的搜索引擎架构往往存在难以扩展和升级的...

    Nutch插件开发文档

    - **灵活性**:任何人都可以根据自己的需求编写插件,这些插件可以被集成到Nutch中,从而极大地丰富了可用的资源库。这对于Nutch的最终用户来说非常有利,因为他们可以根据具体的应用场景选择合适的插件。 - **可...

    Nutch执行单步执行、中间结果文件分析和插件开发基础

    资源中urls.txt是我nutch单步执行过程的种子文件,里面的ppt主要讲解nutch单步执行流程,并获取每次单步执行的结果文件,对文件进行分析,同时ppt还讲解了nutch的插件的基础知识,不是很详细,但是可以作为参考。...

    Nutch中文教程nutcher.zip

    nutcher 是 Apache Nutch 的中文教程,在github上托管。nutch社区目前缺少教程和文档,而且教程对应版本号较为落后。nutcher致力于为nutch提供一个较新的中文教程和文档,供开发者学习。 github地址: ...

    nutch中文分词

    nutch应用,nutch中文分词,nutch中文乱码

    nutch 初学文档教材

    4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引...

    Nutch搜索引擎·Nutch浅入分析(第5期)

    但在后续版本中,为了提高效率和功能,Nutch将索引的建立以及搜索交由Solr实现,从而形成了以Nutch为核心抓取和分析网页,以Solr为核心建立索引和提供搜索的分工合作模式。 具体的工作流程可以概括为以下步骤: 1....

    Nutch入门教程.pdf

    基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...

    论文研究-基于Nutch的中文分词插件实现 .pdf

    基于Nutch的中文分词插件实现,张文龙,刘一伟,中文分词是中文垂直搜索引擎中的一个关键技术,分词的好坏直接影响提取文本的精确度。Nutch是一个开源的Web搜索引擎,它为英文用户�

    基于Java的搜索引擎Nutch中文搜索技术研究

    本文通过对Nutch架构的深入分析,结合词表分词技术和前向最大匹配分词算法,以及JavaCC工具生成的上下文相关文法模块,成功实现了Nutch的中文搜索功能。该方案不仅提升了搜索结果的质量,还为中文搜索引擎的发展提供...

Global site tag (gtag.js) - Google Analytics