- 浏览: 958424 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
plugin(插件)为nutch提供了一些功能强大的部件,举个例子,HtmlParser就是使用比较普遍的用来分析nutch抓取的html文件的插件。 为什么nutch要使用这样的plugin系统? 有三个原因: 1:可扩展性 通过plugin,nutch允许任何人扩展它的功能,而我们要做的只是对给定的接口做简单的实现,举个例子:MSWordParser这个插件是用来分析wordwendang的,它就是一个对parser这个接口的实现 2:灵活性 因为每个人都可以根据自己的需求而写自己的plugin,这样plugin就会有一个很强大的资源库。这样对与应用nutch程序员来说,他可以在自己的搜索引擎上安装符合自己需求的插件,而这些插件就在nutch的plugins中。这对于正在应用nutch的开发者来说应该是一个巨大的福音,因为你有了更多的关于内容抽取的算法来选择,很容易就增加了pdf的分析。 3:可维护性 每个开发者只要关注自己的问题。对于内核的开发者在为引擎内核扩展的同时,为a plug添加一个描述它的接口就可以了。一个plugin的开发者只要关注这个plugin所要实现的功能,而不需要知道整个系统是怎么工作的。它们仅仅需要知道的是plugin和plug之间交换的数据类型。这使得内核更加简单,更容易维护。
plugin相关--什么是plugin,plugin的工作原理 nutch的plugin系统是基于Eclipse 2.x中对插件的使用。plugins对nutch的工作是很重要的。所有的nutch中的parsing(分析),indexing(索引),searching(查询)都是通过不同的plugins来实现的。 在编写一个plugin的时候,你要为一个扩展点添加一个或者更多的扩展项。这些Nutch的扩展点是Nutch在一个plugin中已经定义好了,这个plugin是NutchExtensionPoints(所有的扩展点都会在NutchExtensionPoints plugin.xml这个文件中列出)。每一个扩展点都定义了一个接口,这个接口在扩展时必须被实现。这些扩展点如下: onlineClusterer-为在线的查询结果提供分组算法的扩展点的接口 indexingFiltering-允许为所索引中的Field添加元数据。所有的实现了这个接口plugin会在分析的过程中顺序的逐个运行 Ontology Parser 实现这个接口的parser读取所抓取的document,摘取将被索引的数据。如果你要在nutch中为扩展分析一个新内容类型或者从现有的可分析的内容摘取更多的数据。 HtmlParseFilter 为html parser添加额外的元数据 protocol 实现Protocol的plugin可以使得nutch能使用更多的网络协议(ftp,http)去抓取数据 QueryFilter 为查询转换的扩展点 URLFileter 实现这个扩展点的plugin会对nutch要抓取的网页的urls进行限制,RegexURLFilter提供了通过正则表达式来对Nutch爬行网页的urls的控制。如果你对urls还有更加复杂的控制要求,你可以编写对这个urlfilter的实现 NutchAnalyser 为许多语言特定的分析器提供了扩展点
源文件 在plugin的源文件目录中你会找到以下的文件 plugin.xml 向nutch描述这个plugin的信息 build.xml 告诉ant怎样编译这个plugin plugin的源码
在Nutch使用plugin 如果要在Nutch使用一个给定的plugin,你需要对conf/nutch-site.xml进行编辑并且把plugin的名字添加到plugin.includes中
Nutch plugin系统中的一些概念
编写一个pluginExample 思考编写这样的一个plugin:我们想为一个给定的search term推荐一些与之相关的网页。举个例子,假设我们正在索引网页,当我们注意到有一组网页的内容是关于plugin的,所以我们想如果当某人查询plugin的时候,我们可以推荐他到pluginCentral这个网页,但是同时,也要返回在一般逻辑中的查询结果所有的hits。所以我们将查询结果分成了推荐结果和一般查询结果。 你浏览你的网页然后把一个meta-tags加入网页中,它会告诉plugin这个网页是应该被推荐的。这个tags应该像这样 <meta name="recommended" content="plugins" /> 为了达到目标我们需要写一个plugin,这个plugin扩展3个不同的扩展点,它们是: HTMLParser:从meta-tags得到推荐的terms IndexingFilter:增加一个推荐Field在索引中。 QueryFilter:增加对索引中新Field的查询能力 要建立的文件 首先在plugin的目录中新建一个目录来盛放自己的的plugin,整个plugin我们取名为recommended,然后在这个目录里面 依次建立以下文件: a plugin.xml,这个文件用来向Nutch描述我们新建的plugin a build.xml这个文件告诉编译器应该怎样build这个plugin plugin的源代码则保存在/src/java/org/apache/nutch/parse/recommended/[这里] Plugin.xml你所建立的plugin.xml应该这样: <?xml version="1.0" encoding="UTF-8"?> <plugin id="recommended" name="Recommended Parser/Filter" version="0.0.1" provider-name="nutch.org"> <runtime> <!-- As defined in build.xml this plugin will end up bundled as recommended.jar --> <library name="recommended.jar"> <export name="*"/> </library> </runtime> <!-- The RecommendedParser extends the HtmlParseFilter to grab the contents of any recommended meta tags --> <extension id="org.apache.nutch.parse.recommended.recommendedfilter" name="Recommended Parser" point="org.apache.nutch.parse.HtmlParseFilter"> <implementation id="RecommendedParser" class="org.apache.nutch.parse.recommended.RecommendedParser"/> </extension> <!-- TheRecommendedIndexer extends the IndexingFilter in order to add the contents of the recommended meta tags (as found by the RecommendedParser) to the lucene index. --> <extension id="org.apache.nutch.parse.recommended.recommendedindexer" name="Recommended identifier filter" point="org.apache.nutch.indexer.IndexingFilter"> <implementation id="RecommendedIndexer" class="org.apache.nutch.parse.recommended.RecommendedIndexer"/> </extension> <!-- The RecommendedQueryFilter gets called when you perform a search. It runs a search for the user's query against the recommended fields. In order to get add this to the list of filters that gets run by default, you have to use "fields=DEFAULT". --> <extension id="org.apache.nutch.parse.recommended.recommendedSearcher" name="Recommended Search Query Filter" point="org.apache.nutch.searcher.QueryFilter"> <implementation id="RecommendedQueryFilter" class="org.apache.nutch.parse.recommended.RecommendedQueryFilter" fields="DEFAULT"/> </extension> </plugin> Build.xml<?xml version="1.0"?> <project name="recommended" default="jar"> <import file="../build-plugin.xml"/> </project>
The HTML Parser Extension这是对HtmlParserExtension这个扩展点的实现,它的作用是抓取那些标meta-tags的内容,这样把它们加入正在分析的document中。. package org.apache.nutch.parse.recommended; // JDK imports import java.util.Enumeration; import java.util.Properties; import java.util.logging.Logger; // Nutch imports import org.apache.nutch.parse.HTMLMetaTags; import org.apache.nutch.parse.Parse; import org.apache.nutch.parse.HtmlParseFilter; import org.apache.nutch.protocol.Content; import org.apache.nutch.util.LogFormatter; public class RecommendedParser implements HtmlParseFilter { private static final Logger LOG = LogFormatter .getLogger(RecommendedParser.class.getName()); /** The Recommended meta data attribute name */ public static final String META_RECOMMENDED_NAME="Recommended"; /** * 在html文件中寻找有没有标有meta-tags的内容 */ public Parse filter(Content content, Parse parse, HTMLMetaTags metaTags, DocumentFragment doc) { // Trying to find the document's recommended term String recommendation = null; Properties generalMetaTags = metaTags.getGeneralTags(); for (Enumeration tagNames = generalMetaTags.propertyNames(); tagNames.hasMoreElements(); ) { if (tagNames.nextElement().equals("recommended")) { recommendation = generalMetaTags.getProperty("recommended"); LOG.info("Found a Recommendation for " + recommendation); } } if (recommendation == null) { LOG.info("No Recommendataion"); } else { LOG.info("Adding Recommendation for " + recommendation); parse.getData().getMetadata().put(META_RECOMMENDED_NAME, recommendation); } return parse; } } The Indexer Extension这是对索引点的扩展,如果查找到带有meta-tags的内容,就把它命名''recommended'的field中,然后加入document建立索引 package org.apache.nutch.parse.recommended; // JDK import import java.util.logging.Logger; // Nutch imports import org.apache.nutch.util.LogFormatter; import org.apache.nutch.fetcher.FetcherOutput; import org.apache.nutch.indexer.IndexingFilter; import org.apache.nutch.indexer.IndexingException; import org.apache.nutch.parse.Parse; // Lucene imports import org.apache.lucene.document.Field; import org.apache.lucene.document.Document; public class RecommendedIndexer implements IndexingFilter { public static final Logger LOG = LogFormatter.getLogger(RecommendedIndexer.class.getName()); public RecommendedIndexer() { } public Document filter(Document doc, Parse parse, FetcherOutput fo) throws IndexingException { String recommendation = parse.getData().get("Recommended"); if (recommendation != null) { Field recommendedField = Field.Text("recommended", recommendation); recommendedField.setBoost(5.0f); doc.add(recommendedField); LOG.info("Added " + recommendation + " to the recommended Field"); } return doc; } } The QueryFilter当用户进行查找操作的时候,QueryFilter就会被调用,而且对于recommeded中的boost值会影响查询结果的排序。 package org.apache.nutch.parse.recommended; import org.apache.nutch.searcher.FieldQueryFilter; import java.util.logging.Logger; import org.apache.nutch.util.LogFormatter; public class RecommendedQueryFilter extends FieldQueryFilter { private static final Logger LOG = LogFormatter .getLogger(RecommendedParser.class.getName()); public RecommendedQueryFilter() { super("recommended", 5f); LOG.info("Added a recommended query"); } } 让Nutch可以使用你的plugin 为了让Nutch使用你的plugin,你需要对conf/nuthc-site.xml这个文件进行编辑,把 以下的代码加入 <property> <name>plugin.includes</name> <value>nutch-extensionpoints|protocol-http|urlfilter-regex|parse-(text|html)|index-basic|query-(basic|site|url)|recommended </value> <description>Regular expression naming plugin directory names to include. Any plugin not matching this expression is excluded. In any case you need at least include the nutch-extensionpoints plugin. By default Nutch includes crawling just HTML and plain text via HTTP, and basic indexing and search plugins. </description> </property> 使用Ant对你的plugin进行编译 在之前我们要编辑一下src/plugin/build.xml 这个文件,这是对编译和部署做一些设置 你会看到有很多如下形式的行 <ant dir="[plugin-name]" target="deploy" /> 在</target>前添加一新行 <ant dir="reccomended" target="deploy" /> Running 'ant' in the root of your checkout directory should get everything compiled and jared up. The next time you run a crawl your parser and index filter should get used. You'll need to run 'ant war' to compile a new ROOT.war file. Once you've deployed that, your query filter should get used when searches are performed.
plugins和class加载到nutch的问题集合 对plugin开发者来说最棒的事情就是自由了,可以不去理会别的plugin的开发者在做什么,可以自由的使用第三方的jar库。 nutch是怎样解决类加载这个问题的? Nutch使用了一个非常容易的方法,每一个plugin都有一个属于自己的类加载器,这个class-loader在plugin启动以前将会被初始化
写plugin-by stefan
nutch 0.7中的plugins 如果你要在nutch中应用这些插件,你只需要编辑conf/nutch-site.xml,把你所要用的plugin的名字加入plugin.includes的列表中
Additional Plugins in Dev Branch (0.8)
clustering-carrot2 |
评论
Field recommendedField = Field.Text("recommended", recommendation);
发表评论
-
nutch1.4 环境变量设置
2012-04-06 12:52 1722Exception in thread "main& ... -
正则使用
2010-06-18 00:19 1132java正则表达式(java.Regex)HtmlParser ... -
nutch 1.0 读源码,过滤掉不正确的URL实现方法
2010-06-18 00:17 3397nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputExnutch新发现,为以后备忘
2010-06-16 23:16 2294urls -dir mycrawl -depth 3 -top ... -
HTMLParser 解析html字符串,提取纯文本
2010-05-14 09:59 8323今天在群里问别人怎么提取文本,也没有具体告诉我用什么,只是说用 ... -
HTMLParser的两种使用方法[转]
2010-05-13 23:37 1938HTMLParser的两种使用方法 文章分类:Java编程 ... -
搜索引擎术语
2010-05-05 11:40 1431附录. 术语 B: 半结构化 ... -
影响Lucene索引速度原因以及提高索引速度技巧[转]
2010-04-25 00:11 2744影响Lucene索引速度原因以及提高索引速度技巧 关键字: ... -
如何配置compass的索引位置为相对路径
2009-09-01 19:28 1506Compass是对lucene进行封装 ... -
heritrix 基本介绍
2009-08-01 10:35 3908Heritrix使用小结 1. H ... -
我对HtmlParser 提取网页各属性的总结及示例说明
2009-07-08 13:50 1934/** * 属性过滤器 * @param parser ... -
数学之美 系列十三 信息指纹及其应用
2009-06-25 22:34 10382006年8月3日 上午 11:17:00 ... -
数学之美系列二十一 - 布隆过滤器(Bloom Filter)
2009-06-25 22:27 15122007年7月3日 上午 09:35:00 ... -
用HTMLParser提取URL页面超链接的一段代码(小试牛刀)
2009-06-06 16:54 7092用HTMLParser提取URL页面超 ... -
深入学习Heritrix---解析处理器(Processor)
2009-06-06 13:17 1627键字: heritrix processor 本节解析与 ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-06 10:02 1217Frontier是Heritrix最核心的组成部分之一,也是最 ... -
深入学习Heritrix---解析CrawlController
2009-06-06 10:00 1385当我们以Web UI方式使用Heritrix时,点击任务开始( ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-03 21:50 1518原创作者: pengranxiang 阅读:231次 ... -
lucene2.0+heritrix示例补充
2009-06-03 21:31 1543由于lucene2.0+heritrix一书示例用的网站( ... -
htmlparser 使用手册
2009-05-30 16:47 29212009-05-08 14:20 需要做一 ...
相关推荐
#### 四、Nutch插件实例与应用 本部分将简要介绍Nutch插件的实际应用案例,包括中文分词插件、索引字段增强插件等。通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求...
为了更好地理解Nutch插件系统的实际应用,我们可以考虑一个具体的例子——添加一个新的文档解析器。 假设我们需要为Nutch添加一个用于解析PDF文档的插件。首先,我们定义一个扩展点`PdfParser`,然后创建一个实现了...
Nutch则是一个完整的网络爬虫项目,它扩展了Lucene的功能,集成了网页抓取、分析、存储和索引等一整套流程。Nutch的源码揭示了其如何使用HTTP协议抓取网页,通过Parser解析HTML内容,然后使用Lucene进行索引。特别地...
通过上述知识点的总结可以看出,Nutch 不仅是一个强大的搜索引擎框架,而且还是一个非常适合教学和研究的平台。无论是对于希望深入了解搜索引擎内部运作的技术人员,还是对于希望构建自定义搜索解决方案的企业来说,...
Nutch是大数据处理框架Hadoop的一个重要组成部分,它使用Hadoop进行分布式数据存储和处理。Nutch的学习对于理解Web抓取、搜索引擎原理以及Hadoop生态系统有极大的帮助。 在描述中提到的“博文链接:...
【标题】"基于Apache Nutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件.zip" 提供了一个深入的爬虫项目实例,旨在解决AJAX动态网页内容的抓取问题。Apache Nutch是一个开源的网络爬虫框架,而Htmlunit是一个无头...
Lucene是一个文本搜索库,主要用于实现全文检索功能,而Nutch则是一个完整的搜索引擎框架,除了文本检索外,还包含了网页抓取、数据清洗、索引构建等环节,是Lucene在搜索引擎领域的高级应用实例。 #### 2. nutch的...
为了实现这些目标,Nutch需要一个分布式文件系统和一个分布式计算平台。分布式文件系统需要具备单一共享的命名空间、容错性、计算和数据在同一节点上、以及能够不重启系统就增加或移除磁盘和节点的能力。Google发布...
- **实例分布**:采用多个HDFS实例来分散负载,如HDFS实例一至实例四,并通过共享存储进行数据迁移。 #### 三、系统演示 虽然具体演示细节未给出,但可以推测该部分主要展示系统如何实际运行,包括数据处理流程、...
它提供了一个高效、灵活的框架,使得开发者能够轻松地实现对网页数据的抓取和处理。下面将详细介绍S2Robot的主要特点、核心功能以及如何使用它进行网络爬虫的开发。 一、S2Robot的基本概念 1. **模块化设计**:S2...