- 浏览: 958387 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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懒加载?什么时候用懒加载?为什么要用懒加载?
**
* Low level api to get the most relevant (formatted) sections of the document.
* This method has been made public to allow visibility of score information held in TextFragment objects.
* Thanks to Jason Calabrese for help in redefining the interface.
* @param tokenStream
* @param text
* @param maxNumFragments
* @param mergeContiguousFragments
* @throws IOException
*/
public final TextFragment[] getBestTextFragments(
TokenStream tokenStream,
String text,
boolean mergeContiguousFragments,
int maxNumFragments)
throws IOException
...{
ArrayList docFrags = new ArrayList();
StringBuffer newText=new StringBuffer();
TextFragment currentFrag = new TextFragment(newText,newText.length(), docFrags.size());
fragmentScorer.startFragment(currentFrag);
docFrags.add(currentFrag);
FragmentQueue fragQueue = new FragmentQueue(maxNumFragments);
try
...{
org.apache.lucene.analysis.Token token;
String tokenText;
int startOffset;
int endOffset;
int lastEndOffset = 0;
textFragmenter.start(text);
TokenGroup tokenGroup=new TokenGroup();
token = tokenStream.next();
while ((token!= null)&&(token.startOffset()<maxDocBytesToAnalyze))
...{
if((tokenGroup.numTokens>0)&&(tokenGroup.isDistinct(token)))
...{
//the current token is distinct from previous tokens -
// markup the cached token group info
startOffset = tokenGroup.matchStartOffset;
endOffset = tokenGroup.matchEndOffset;
tokenText = text.substring(startOffset, endOffset);
String markedUpText=formatter.highlightTerm(encoder.encodeText(tokenText), tokenGroup);
//store any whitespace etc from between this and last group
if (startOffset > lastEndOffset)
newText.append(encoder.encodeText(text.substring(lastEndOffset, startOffset)));
newText.append(markedUpText);
lastEndOffset=Math.max(endOffset, lastEndOffset);
tokenGroup.clear();
//check if current token marks the start of a new fragment
if(textFragmenter.isNewFragment(token))
...{
currentFrag.setScore(fragmentScorer.getFragmentScore());
//record stats for a new fragment
currentFrag.textEndPos = newText.length();
currentFrag =new TextFragment(newText, newText.length(), docFrags.size());
fragmentScorer.startFragment(currentFrag);
docFrags.add(currentFrag);
}
}
tokenGroup.addToken(token,fragmentScorer.getTokenScore(token));
// if(lastEndOffset>maxDocBytesToAnalyze)
// {
// break;
// }
token = tokenStream.next();
}
currentFrag.setScore(fragmentScorer.getFragmentScore());
if(tokenGroup.numTokens>0)
...{
//flush the accumulated text (same code as in above loop)
startOffset = tokenGroup.matchStartOffset;
endOffset = tokenGroup.matchEndOffset;
tokenText = text.substring(startOffset, endOffset);
String markedUpText=formatter.highlightTerm(encoder.encodeText(tokenText), tokenGroup);
//store any whitespace etc from between this and last group
if (startOffset > lastEndOffset)
newText.append(encoder.encodeText(text.substring(lastEndOffset, startOffset)));
newText.append(markedUpText);
lastEndOffset=Math.max(lastEndOffset,endOffset);
}
//Test what remains of the original text beyond the point where we stopped analyzing
if (
// if there is text beyond the last token considered..
(lastEndOffset < text.length())
&&
// and that text is not too large...
(text.length()<maxDocBytesToAnalyze)
)
...{
//append it to the last fragment
newText.append(encoder.encodeText(text.substring(lastEndOffset)));
}
currentFrag.textEndPos = newText.length();
//sort the most relevant sections of the text
for (Iterator i = docFrags.iterator(); i.hasNext();)
...{
currentFrag = (TextFragment) i.next();
//If you are running with a version of Lucene before 11th Sept 03
// you do not have PriorityQueue.insert() - so uncomment the code below
/**//*
if (currentFrag.getScore() >= minScore)
{
fragQueue.put(currentFrag);
if (fragQueue.size() > maxNumFragments)
{ // if hit queue overfull
fragQueue.pop(); // remove lowest in hit queue
minScore = ((TextFragment) fragQueue.top()).getScore(); // reset minScore
}
}
*/
//The above code caused a problem as a result of Christoph Goller's 11th Sept 03
//fix to PriorityQueue. The correct method to use here is the new "insert" method
// USE ABOVE CODE IF THIS DOES NOT COMPILE!
fragQueue.insert(currentFrag);
}
//return the most relevant fragments
TextFragment frag[] = new TextFragment[fragQueue.size()];
for (int i = frag.length - 1; i >= 0; i--)
...{
frag[i] = (TextFragment) fragQueue.pop();
}
//merge any contiguous fragments to improve readability
if(mergeContiguousFragments)
...{
mergeContiguousFragments(frag);
ArrayList fragTexts = new ArrayList();
for (int i = 0; i < frag.length; i++)
...{
if ((frag[i] != null) && (frag[i].getScore() > 0))
...{
fragTexts.add(frag[i]);
}
}
frag= (TextFragment[]) fragTexts.toArray(new TextFragment[0]);
}
return frag;
}
finally
...{
if (tokenStream != null)
...{
try
...{
tokenStream.close();
}
catch (Exception e)
...{
}
}
}
}
评论
好像是高亮显示方法的一个类,Highlighter.java
发表评论
-
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 1216Frontier是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 0.9 版本发布于较早时期,但其核心原理和技术至今仍然对理解搜索引擎的工作机制具有重要意义。 2. **WAR 文件**: 提供的WAR(Web Application Archive)文件是Java Web 应用的标准打包格式,可以直接部署在...
在 Nutch 0.9 中,Hadoop 被用来处理并行计算,提高了数据处理速度和系统可扩展性。这使得 Nutch 能够处理大规模的网页抓取任务。 8. **插件系统**: Nutch 的核心设计之一是其插件系统,允许用户通过编写插件来...
### Eclipse中编译Nutch-0.9:详解与步骤 #### 核心知识点概览 在本篇文章中,我们将深入探讨如何在Eclipse环境中编译Nutch-0.9,一个开源的网络爬虫项目,用于抓取互联网上的网页信息。文章涵盖的关键知识点包括...
本文详细分析了 Nutch 0.9 版本中的分页代码实现方法。通过这段代码,用户可以根据自己的需求动态跳转至不同页面查看搜索结果,极大地提升了用户体验。同时,这种分页技术也是 Web 开发中常见的设计模式之一,对于...
在项目创建后,你需要确保Nutch的所有源码文件夹都被正确地添加到Eclipse中。通过右键点击项目名,选择“Properties > Java Build Path > Source”,然后点击“Add Folder”按钮,将“conf”文件夹添加进来,这是...
1. **下载Nutch源码**:首先,从Apache官方网站或者镜像站点下载Nutch-0.9的源代码。将下载的源码解压到你想要的工作目录下,例如`C:\nutch\src\nutch-0.9`。 2. **配置环境变量**:打开Cygwin终端,设置必要的环境...
首先,我们要明白Nutch的摘要生成机制。Nutch采用了一种基于TF-IDF(词频-逆文档频率)的算法来生成摘要,该算法考虑了关键词在文档中的重要性。然而,这可能会导致生成的摘要过于关注关键词,而忽视了语义连贯性。...
实验过程中,不仅涉及了搜索引擎的基础架构,还涵盖了Linux环境的使用、网页爬虫技术、文本处理与分析,以及分词算法的实践应用。这些知识点对于理解和开发自己的搜索引擎系统具有重要意义。通过Nutch和IKAnalyzer的...
### Nutch插件机制详解 #### 一、引言 Nutch是一款开源的网络爬虫项目,能够自动抓取互联网上的网页并建立索引。为了提高系统的灵活性、可扩展性和可维护性,Nutch采用了插件化的设计思路,即通过一系列可插拔的...
通过这个库,你可以方便地提取RTF文件中的文本、样式信息、图片等元素,这对于文本分析、信息抽取或搜索引擎的构建是非常有用的。 接下来,`jid3lib-0.5.4.jar`是一个专门用于处理ID3标签的库。ID3标签是音乐文件...
5. **链接分析**:Nutch使用PageRank算法对网页进行链接分析,评估网页的重要性。这种算法是搜索引擎排名的关键部分,有助于提升搜索结果的相关性。 6. **数据存储**:Nutch默认使用Hadoop的HDFS作为数据存储系统,...
对于初学者来说,详细注释的示例代码提供了很好的学习资源,有助于理解Lucene和Nutch的内部工作机制。同时,实战经验将使开发者具备构建自定义搜索引擎的能力,为大数据时代的信息检索提供强大的工具。
Nutch 源码的分析和理解对于想要深入研究搜索引擎工作原理、网页抓取技术和大数据处理的开发者来说至关重要。 在`apache-nutch-2.2.1`这个压缩包中,你将找到以下关键组成部分: 1. **源代码结构**:Nutch 的源...
在 Nutch 0.9 中,关键知识点包括: 1. **Web 爬虫(Web Crawler)**:Nutch 的核心功能之一是其高效的 Web 爬虫,能够自动发现并抓取互联网上的网页。这个爬虫使用种子 URL 开始,通过解析 HTML 页面中的链接进行...
标题中的“电信设备-一种基于Nutch的Web信息提取方法和系统”暗示了这个压缩包内容涉及的是在电信行业中利用Nutch工具进行网络信息检索和提取的技术应用。Nutch是Apache软件基金会的一个开源项目,主要功能是实现大...
文档中提到的Nutch 0.9版本需要特别注意,因为后续版本的Nutch可能在配置和运行机制上有所变化。而Nutch在不同版本的Windows操作系统上的兼容性,以及是否需要特别的依赖库,都需要在安装前仔细阅读Nutch的官方文档...
Nutch 插件机制是其核心功能之一,它允许开发者轻松地扩展Nutch的功能,以适应不同的数据处理需求。Nutch 是一个开源的网络爬虫项目,主要用于收集、索引和搜索互联网上的信息。通过插件机制,Nutch可以处理各种不同...
Nutch的源码分析主要涉及以下几个关键知识点: 1. **网络爬虫**:Nutch的核心功能是作为一个网络爬虫,它自动遍历互联网上的网页,通过跟踪页面间的链接来发现新的URL。它使用种子URL开始,然后递归地抓取与这些...
本教程将详细介绍如何在MyEclipse中部署Nutch1.3的工程源码。 首先,我们需要确保具备以下环境: 1. 安装了Java Development Kit (JDK):因为Nutch和MyEclipse都是基于Java的,所以确保系统已安装JDK且版本与Nutch...