`
deepfuture
  • 浏览: 4375506 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79863
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69456
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:102784
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:284004
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14910
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:66977
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31807
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45791
社区版块
存档分类
最新评论

lucene-索引HTML文档

阅读更多

1、大部分WEB文档采用HTML格式。

2、本例用如下HTML文档

<html>

<head>

<title>

Laptop power supplies are avaliable in First class only

</title>

</head>

<body>

<h1>code,write,fly</h1>

</body>

</html>

3、使用JTidy

JTidy由Andy Quick编写的Tidy的Java版本。

public class JTidyHTMLHandler implements DocumentHandler{

publicorg.apache.lucene.document.Document getDocument(InputStreamis)

throwsDocumentHandlerException{//传入一个代表HTML文档的InputStream对象

Tidy tidy=new Tidy();

tidy.setQuiet(true);

tidy.setShowWarnings(false);

//解析代表HTML文档的InputStream对象

org.w3c.dom.Documentroot=tidy.parseDOM(is,null);

ElementrawDoc=root.getDocumentElement();

 

org.apache.lucene.document.Document doc=neworg.apache.lucene.document.Document();

Stringtitle=getTitle(rawDoc);//获得标题

Stringbody=getBody(rawDoc);//获得<body>和</body>之间所有元素

if((title!=null)&&(!title.equals(""))){

doc.add(Field.Text("title",title));

}

if((body!=null)&&(!body.equals(""))){

doc.add(Field.Text("body",body));

}

return doc;

}

protected String getTitle(Element rawDoc){

if(rawDoc==null){

returnnull;

}

 

Stringtitle="";

NodeListchildren=rawDoc.getElementsByTagName("title");

if(chidren.getLength()>0){//获得第一个<title>标志的文本

Element titleElement=((Element) children.item(0));

Text text=(Text) titleElement.getFirstChild();

if (text!=null){

title=text.getData();

}

}

returntitle;

}

protected String getBody(ELement rawDoc){

if (rawDoc==null){

return null;

}

String body="";

NodeList children=rawDoc.getElementByTagName("body");//获得<body>标志的引用

if (children.getLength()>0){

body=getText(childre.item(0));//提取<body>和</body>之间的所有文本

}

return body;

}

protected grtText(Node node){

NodeListchildren=node.getChildNodes();

StringBuffer sb=new StringBuffer();

for (inti=0;i<children.getLength();i++){//提取在特定Node对象下元素中的文本

Node children=node.getChildNodes();

StringBuffer sb=new StringBuffer();

for (int i=0;i<children.getLength();i++){

Node child=children.item(i);

switch (child.getNodeType()){

case Node.ELEMENT_NODE:

sb.append(getText(child));

sb.append(" ");

break;

case Node.TEXT_NODE:

sb.append(((Text) child).getData());

break;

}

}

returnsb.toString();

}

 

publicstatic void main(String args[]) throws Exception{

JTidyHTMLHandler handler=new JTidyHTMLHandler();

org.apache.lucene.document.Document doc=

handler.getDocument(new FileInputStream(new File(args[0])));

System.out.println(doc);

}

}

}

4、使用NekoHTML

NekoHTML是一个简单的HTML扫描器和标签补偿器,它使程序员可以解析并通过标准的XML接口访问HTML文档。解析器扫描HTML文件并修改开发者和计算机用户在编写HTML文档时所犯罪的大量常见错误。

public class NekoHTMLHandler implements Document{

private DOMFragmentParserparser=new DOMFragmentParser();//NEKO针对HTML的DOM解析器

public DocumentgetDocument(InputStream is) throws DocumentHandlerException{

DocumentFragment node=new HTMLDocumentImpl().createDocumentFragment();

try{

parser.parse(new InputSouce(id),node);

}

catch (IOException e){

throw new DocumentHandlerException("cannot parse HTML document",e);

}

catch (SAXException e){

throw new DocumentHandlerException("cannot parse HTMLdocument",e);

}

 

org.apache.lucene.document.Document doc=

new org.apache.lucene.document.Document();

//提取/存储title中的文本

StringBuffer sb=new StringBuffer();

getText(sb,node,"title");

String title=sb.toString();

//清空stringbuffer

sb.setLength(0);

//从DOM NODE对象中提取出所有文本

getText(sb,node);

String text=sb.toString();

if((title!=null)&&(!title.equals(""))){

doc.add(Field.Text("title",title));

}

if((body!=null)&&(!body.equals(""))){

doc.add(Field.Text("body",text));

}

return doc;

}

private void getText(StringBuffer sb,Nodenode){

if (node.getNodeType()==Node.TEXT_NODE){//从DOMNode对象中提取出表示特定元素的所有文本

sb.append(node.getNodeValue());

}

Nodelist children=node.getChildNodes();

if (children!=null){

int len=children.getLength();

for (int i=0;i<len;i++){

getText(sb,children.item(i));

}

}

}

private booleangetText(StringBuffer sb,Node node,String element){

//从Node对象中提取表示特定元素的所有文本

if (node.getNodeType()==Node.ELEMENT_NODE){

if(element.equalsIgnoreCase(node.getNodeName())){

getText(sb,node);

return true;

}

}

NodeList children=node.getChildNodes();

if (children!=null){

intlen=chidren.getLength();

for (int i=0;i<len;i++){

if (getText(sb,children.item(i)),element){

return true;

}

}

}

return false;

}

public static void main(String args[]) throwsException{

NekoHTMLHandler handler=new NekoHTMLHandler();

org.apache.lucene.document.Document doc=

handler.getDocument(new FileInputStream(new File(args[0])));

System.out.println(doc);

}

}

分享到:
评论

相关推荐

    lucene-core-7.2.1-API文档-中文版.zip

    包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.2.1; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API...

    lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0

    - **文档处理增强**:引入了对PDF、HTML等更多文件格式的支持,使得Lucene可以处理更广泛的数据源。 - **多线程支持**:在3.0系列中,Lucene增强了对多线程环境的支持,允许并发索引和检索操作,提升性能。 3. **...

    lucene-6.5.0工具包

    4. **文档处理**:能读取和索引多种格式的文件,如HTML、PDF、Word等,使得索引内容多样化。 5. **实时搜索**:Lucene的索引更新可以在短时间内完成,实现动态索引和实时搜索。 6. **内存和磁盘管理**:通过缓存...

    最新版windows lucene-8.10.0.zip

    7. **更新和删除索引**:Lucene支持动态更新索引,当文档内容发生变化时,可以快速地反映到索引中;同样,也可以方便地从索引中删除文档。 8. **多线程支持**:在Windows环境下,Lucene可以利用多核处理器的优势,...

    lucene-6.4.0-src.zip

    5. **文档处理**:支持多种文档格式的读取,如PDF、HTML等,方便从各种源获取和索引文本。 三、Lucene工作原理 1. **文档索引**:首先,Lucene会对输入的文档进行分析,将文本分解为关键词(术语),然后这些术语...

    Lucene---全文检索(文档pdf/txt/office/html)

    - **索引(Index)**: Lucene 首先对文档内容进行分析和处理,生成倒排索引(Inverted Index),这是一种将单词映射到包含该单词的文档集合的数据结构,便于快速查找包含特定单词的文档。 - **分词器(Tokenizer)...

    lucene-highlighter-4.4.0.jar

    在Lucene的众多组件中,Highlighter模块扮演着重要角色,它能够帮助我们从搜索结果中提取出与查询关键词相关的片段,使用户能够快速理解文档的关键内容。本文将深入探讨Lucene 4.4.0版本中的Highlighter模块,了解其...

    jakarta-lucene-1.9-final.zip_lucene_lucene 1.9 final j

    Lucene的核心功能包括文档的索引和搜索,支持多种类型的文档,如文本、HTML、PDF等。它的工作原理是将文档内容转化为结构化的索引形式,便于快速查询。索引过程包括分词(Tokenization)、词干提取(Stemming)、...

    lucene-analysis.jar

    它的核心功能包括文档的索引、搜索以及相关的高级特性。其中,"lucene-analysis.jar"是Lucene项目中的一个重要组件,主要负责文本的预处理工作,即文本分析。本文将深入探讨这个jar包及其包含的文件,以揭示其在...

    lucene索引非txt文档笔记

    然而,Lucene 默认仅支持对纯文本(txt)和 HTML 格式的文档进行索引。但在实际应用中,我们可能需要处理诸如 Word、PDF、RTF 和 XML 等多种格式的文档。为了实现对这些非文本格式的文档进行搜索,我们需要首先将其...

    Lucene-WEB-search-program.zip_lucene java web_lucene web_lucene

    Lucene支持索引多种文件格式,包括HTML、PDF、DOC等,并且具备分词、布尔查询、短语查询等多种功能。 **二、构建Web搜索程序的基本步骤** 1. **设置环境**:首先,你需要在你的开发环境中安装Java和Apache Maven...

    lucene-4.8.0源代码,比较全

    2. 分区索引(Segmented Index):Lucene采用分段索引策略,每个段都是一个独立的、完整的索引,这使得添加新文档和更新操作变得高效。4.8.0版本对段合并策略进行了优化,提升了整体性能。 3. 倒排索引(Inverted ...

    最新版windows lucene-8.9.0.zip

    5. **文档处理**:新版本可能增强了对不同文档格式的支持,如PDF、Word、HTML等,使得非文本数据的全文检索成为可能。 6. **API改进**:Lucene的API通常会随着版本迭代而变得更为友好和完善,8.9.0可能会提供更简洁...

    luke源码--查看lucene索引文件

    《深入理解Luke:洞察Lucene索引文件》 在信息技术领域,搜索引擎的高效运作离不开对数据的快速检索,而Lucene作为开源全文检索库,扮演了核心角色。在这个过程中,Luke工具提供了一种直观的方式,让我们能够查看和...

    最新版linux lucene-8.8.0.tgz

    4. **文档处理**:Lucene支持多种格式的文档,如HTML、PDF等。在新版本中,文档解析和内容提取能力可能有所增强,能更好地处理各种类型的文档内容。 除了这些基础功能,Linux Lucene 8.8.0还可能引入了以下新特性:...

    深入 Lucene 索引机制深入 Lucene 索引机制

    通过建立倒排索引,Lucene能够在大量数据中快速找到匹配的文档,使得全文检索变得简单且高效。对于Java开发者而言,集成Lucene能极大地提升应用程序的搜索功能,使其在处理文本数据时具备强大的处理能力。了解并掌握...

    最新版linux lucene-8.7.0.tgz

    10. **文档和示例**: 官方文档通常会详尽地介绍如何在Linux环境中安装、配置和使用Lucene 8.7.0。开发者可以通过阅读文档、查看示例代码来快速上手。 总的来说,Linux Lucene 8.7.0是一个强大且灵活的文本搜索工具...

    lucene-6.5.1

    - 官方下载页面: [http://lucene.apache.org/downloads.html](http://lucene.apache.org/downloads.html) #### 解压与配置 1. **解压**: 将下载的压缩包解压到期望的目录下。 2. **环境配置**: - **Java环境**: ...

    java lucene3.0 jar包

    例如,他们首先会使用`lucene-core`来分析和索引文档内容,然后通过`lucene-memory`在内存中管理索引以实现快速搜索,最后使用`lucene-highlighter`来提高用户体验,显示搜索关键词的高亮结果。 Java Lucene 3.0的...

    基于lucene的索引与搜索

    网络机器人需要解析HTML文档以提取有用的信息。Lucene虽然不直接处理HTML解析,但可以与HTML解析库(如Jsoup)结合,将HTML内容转化为适合索引的文本。 3.2.2 URL管理 网络机器人需要管理已访问和待访问的URL集合...

Global site tag (gtag.js) - Google Analytics