- 浏览: 958009 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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的列表中
-
clustering-carrot2 - Online Search Results Clustering using Carrot2's Lingo component.
-
creativecommons - Support for crawling and searching Creative-Commons licensed content.
-
index-basic - Adds url, content and anchor fields to the index.
-
index-more - Adds date, content-length, contentType, primaryType and subtype fields to the index.
-
languageidentifier - Adds a lang field to the index and allows you to query against it.
-
ontology - Helps refine queries based on owl files.
-
parse-ext - A wrapper that invokes external command to do real parsing job.
-
parse-html - Parses HTML documents
-
parse-js - Parses JavaScript
-
parse-mp3 - Parses MP3s
-
parse-msword - Parses MS Word documents
-
parse-pdf - Parses PDFs
-
parse-rss - Parses RSS feeds
-
parse-rtf - Parses RTF files
-
parse-text - Parses text documents
-
protocol-file - Retreives documents from the filesystem
-
protocol-ftp - Retreives documents through ftp
-
protocol-http - Retreives documents through http
-
protocol-httpclient - Retreives documents through http and https
-
query-basic - Runs queries against content, url and anchor fields
-
query-more - Runs queries against date, content-length, contentType, primaryType and subType fields.
-
query-site - Runs queries against site field
-
query-url - Runs queries against url field.
-
urlfilter-prefix
-
urlfilter-regex
Additional Plugins in Dev Branch (0.8)
-
analysis-de
-
analysis-fr
-
lib-commons-httpclient
-
lib-http
-
lib-jakarta-poi
-
lib-log4j
-
lib-lucene-analyzers
-
lib-nekohtml
-
lib-parsems
-
parse-msexcel - Parses MS Excel documents
-
parse-mspowerpoint - Parses MS Powerpoint documents
-
parse-oo - Parses Open Office and Star Office documents (Extentsions: ODT, OTT, ODH, ODM, ODS, OTS, ODP, OTP, SXW, STW, SXC, STC, SXI, STI)
-
parse-swf - Parses Flash SWF files
-
microformats-reltag - Adds rel-tag fields to the index and runs queries against them.
-
parse-zip
clustering-carrot2
发表评论
-
nutch1.4 环境变量设置
2012-04-06 12:52 1720Exception in thread "main& ... -
正则使用
2010-06-18 00:19 1131java正则表达式(java.Regex)HtmlParser ... -
nutch 1.0 读源码,过滤掉不正确的URL实现方法
2010-06-18 00:17 3392nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputExnutch新发现,为以后备忘
2010-06-16 23:16 2292urls -dir mycrawl -depth 3 -top ... -
HTMLParser 解析html字符串,提取纯文本
2010-05-14 09:59 8321今天在群里问别人怎么提取文本,也没有具体告诉我用什么,只是说用 ... -
HTMLParser的两种使用方法[转]
2010-05-13 23:37 1936HTMLParser的两种使用方法 文章分类:Java编程 ... -
搜索引擎术语
2010-05-05 11:40 1428附录. 术语 B: 半结构化 ... -
影响Lucene索引速度原因以及提高索引速度技巧[转]
2010-04-25 00:11 2743影响Lucene索引速度原因以及提高索引速度技巧 关键字: ... -
如何配置compass的索引位置为相对路径
2009-09-01 19:28 1504Compass是对lucene进行封装 ... -
heritrix 基本介绍
2009-08-01 10:35 3907Heritrix使用小结 1. H ... -
我对HtmlParser 提取网页各属性的总结及示例说明
2009-07-08 13:50 1932/** * 属性过滤器 * @param parser ... -
数学之美 系列十三 信息指纹及其应用
2009-06-25 22:34 10352006年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 7090用HTMLParser提取URL页面超 ... -
深入学习Heritrix---解析处理器(Processor)
2009-06-06 13:17 1627键字: heritrix processor 本节解析与 ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-06 10:02 1215Frontier是Heritrix最核心的组成部分之一,也是最 ... -
深入学习Heritrix---解析CrawlController
2009-06-06 10:00 1383当我们以Web UI方式使用Heritrix时,点击任务开始( ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-03 21:50 1516原创作者: pengranxiang 阅读:231次 ... -
lucene2.0+heritrix示例补充
2009-06-03 21:31 1540由于lucene2.0+heritrix一书示例用的网站( ... -
htmlparser 使用手册
2009-05-30 16:47 29202009-05-08 14:20 需要做一 ...
相关推荐
包含翻译后的API文档:spring-plugin-core-2.0.0.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE; 标签:spring、core、plugin、spring...
包含翻译后的API文档:spring-plugin-metadata-2.0.0.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE; 标签:spring、metadata、plugin...
包含翻译后的API文档:struts2-json-plugin-2.3.24-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.struts:struts2-json-plugin:2.3.24; 标签:apache、struts2、plugin、struts、json、jar包、java、...
包含翻译后的API文档:spring-plugin-core-1.2.0.RELEASE-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.springframework.plugin,artifactId:spring-plugin-core,version:1.2.0.RELEASE 使用...
1.unity 插件 Arduino Bluetooth Plugin 最新版本 仅供个人学习使用,如需商用,请超官方网站上去购买。支持开发作者。 2.发布安卓的话,里面有个jar 要勾选Load on startup,亲测有用 3.Arduino Bluetooth Plugin...
包含翻译后的API文档:spring-plugin-core-1.2.0.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.springframework.plugin,artifactId:spring-plugin-core,version:1.2.0....
包含翻译后的API文档:jfinal-mail-plugin-3.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:cn.fsdev:jfinal-mail-plugin:3.0; 标签:fsdev、jfinal、mail、plugin、中英对照文档、jar包、java; ...
Notepad++插件ComparePlugin.dll64位32位compare插件下载
MT翻译插件 MT管理器官方翻译插件源码 项目说明 项目使用 Android Studio 进行开发,在默认文件结构的基础上,删除多余的文件和配置,仅保留插件开发所需要的相关内容,并集成了一键打包功能。 插件源码文件在下面四...
包含翻译后的API文档:spring-plugin-metadata-2.0.0.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE; 标签:spring、...
包含翻译后的API文档:spring-plugin-metadata-1.2.0.RELEASE-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.springframework.plugin,artifactId:spring-plugin-metadata,version:1.2.0....
包含翻译后的API文档:spring-plugin-core-2.0.0.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE; 标签:spring、core、plugin、...
这份中文翻译版使得更多的中国开发者能够跨越语言障碍,深入学习和掌握Gradle插件的使用。 Gradle的核心概念是构建脚本,它采用Groovy或Kotlin DSL编写,具有强大的灵活性和可扩展性。插件在Gradle中扮演着至关重要...
ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛应用于构建语言、工具和框架,包括SQL、HTML、配置文件、编程语言等。ANTLR...
安装插件的过程相对简单,主要步骤包括下载 Tmxmall_MT_Plugin_for_SDL_Trados_Studio_2015_V1.0.exe 文件,然后按照安装向导进行操作。安装完成后,用户在 SDL Trados Studio 2015 中会看到一个新的选项或面板,...
google翻译(post版)PHP源码(Zend plugin) 采用POST方式,不限字节大小 采用工厂模式,效率高 TranslateAPI.php
这个插件的主要功能是将SonarQube的默认英文界面翻译成中文,使中国用户能够更方便地理解和使用SonarQube的各项功能。它涵盖了界面的所有元素,包括菜单、选项、提示信息和报告,使得国内开发团队无需掌握英语即可...
包含翻译后的API文档:jfinal-mail-plugin-3.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:cn.fsdev:jfinal-mail-plugin:3.0; 标签:fsdev、jfinal、mail、plugin、中文文档、jar包、java; 使用方法:解压...