`

使用Lucene进行全文检索---得到有效的内容

阅读更多
  在使用lucene对相关内容进行索引时,会遇到各种格式的内容,例如Html,PDF,Word等等,那么我们如何从这么文档中得到我们需要的内容哪?例如Html的内容,一般我们不需要对Html标签建立索引,因为那不是我们需要搜索的内容.这个时候,我们就需要从Html内容中解析出我们所需要的内容.对于PDF,Word文档,也是类似的要求.
 
  总之,我们只需要从内容中提取出我们需要的文本来建立索引,这样用户就能搜索到需要的内容,然后访问对应的资源即可.

  Lucene本身带的例子中有一个解析Html的代码,不过不是纯JAVA的,所以在网上我又找到了另外一个Html解析器,网址如下:http://htmlparser.sourceforge.net.
 
  对PDF解析的相关项目有很多,例如PDFBox.在PDFBox里面提出pdf的文本内容只需要一句话即可:  
  
   

Document doc = LucenePDFDocument.getDocument( file );  

  
  当然如果需要更高级的设置,就要使用PDFBox中PDFTextStripper等类来实现更高级的操作了.
 
 
  对Word文档解析的相关有POI,网址是 http://jakarta.apache.org/poi/.
 
  HtmlParser本身提供的功能很强大,我们下面主要来关注我们需要的功能.首先给出几个函数如下:
 

 /**
 * 解析一个Html页面,返回一个Html页面类.
 *
 * @param resource 文件路径或者网址
 */
    public static SearchHtmlPage parseHtmlPage(String resource)
    {
        String title = "";
        String body = "";
        try
        {
            Parser myParser = new Parser(resource);

            //设置编码:根据实际情况修改
            myParser.setEncoding("GBK");

            HtmlPage visitor = new HtmlPage(myParser);

            myParser.visitAllNodesWith(visitor);

            title = visitor.getTitle();

            body = combineNodeText(visitor.getBody().toNodeArray());
        }
        catch (ParserException e)
        {
            LogMan.error("Parse Html Page " + resource + " Error!");
        }

        SearchHtmlPage result = new SearchHtmlPage(title, body);

        return result;
    }

    /**
     * 解析Html内容,得到普通文本和链接的内容.
     *
     * @param content 要解析的内容
     * @return 返回解析后的内容
     */
    public static String parseHtmlContent(String content)
    {
        Parser myParser;
        NodeList nodeList = null;

        myParser = Parser.createParser(content, "GBK");

        NodeFilter textFilter = new NodeClassFilter(TextNode.class);
        NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);

        //暂时不处理 meta
        //NodeFilter metaFilter = new NodeClassFilter(MetaTag.class);

        OrFilter lastFilter = new OrFilter();
        lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });

        try
        {
            nodeList = myParser.parse(lastFilter);
        }
        catch (ParserException e)
        {
            LogMan.warn("Parse Content Error", e);
        }

        //中场退出了
        if (null == nodeList)
        {
            return "";
        }

        Node[] nodes = nodeList.toNodeArray();

        String result = combineNodeText(nodes);
        return result;
    }

 //合并节点的有效内容
    private static String combineNodeText(Node[] nodes)
    {
        StringBuffer result = new StringBuffer();

        for (int i = 0; i < nodes.length; i++)
        {
            Node anode = (Node) nodes[i];

            String line = "";
            if (anode instanceof TextNode)
            {
                TextNode textnode = (TextNode) anode;
                //line = textnode.toPlainTextString().trim();
                line = textnode.getText();
            }
            else if (anode instanceof LinkTag)
            {
                LinkTag linknode = (LinkTag) anode;

                line = linknode.getLink();
                //过滤jsp标签
                line = StringFunc.replace(line, "<%.*%>", "");
            }

            if (StringFunc.isTrimEmpty(line)) continue;

            result.append(" ").append(line);
        }

        return result.toString();
    }


  
  其中SearchHtmlPage类是表示一个Html页面的模型,包含标题和内容,代码如下:
  
 package com.jscud.www.support.search;
 
 /**
  * 搜索时解析Html后返回的页面模型.
  *
  * @author scud(飞云小侠) http://www.jscud.com
  * 
  */
 public class SearchHtmlPage
 {
     /**标题*/
     private String title;
 
     /**内容*/
     private String body;
    
     public SearchHtmlPage(String title, String body)
     {
         this.title = title;
         this.body = body;
     }
    
     public String getBody()
     {
         return body;
     }
 
     public void setBody(String body)
     {
         this.body = body;
     }
 
     public String getTitle()
     {
         return title;
     }
 
     public void setTitle(String title)
     {
         this.title = title;
     }
 }

来源:scud(飞云小侠) http://www.jscud.com

分享到:
评论

相关推荐

    使用zend Framework的lucene进行全文检索

    在本文中,我们将探讨如何使用Zend Framework的Lucene模块进行全文检索,特别是针对中文分词的处理。全文检索是提高网站或应用搜索功能的关键技术,它允许用户输入任意词汇,系统能够快速找到与之相关的内容。Zend ...

    基于Lucene的全文检索系统

    【描述】提到的“在学校教育网上搜的 不知道帮助大不大 看看吧 也许会用得到 好多个 可能有重复”暗示了资源可能包含多个关于Lucene全文检索系统的PDF文档,这些文档可能来源于不同的来源,可能涵盖相同或相似的主题...

    je-analysis-1.5.3、lucene-core-2.4.1分词组件

    为了获得最佳性能和最新特性,通常建议使用更新的Lucene版本,同时保持与分词器的兼容性。 总的来说,"je-analysis-1.5.3"和"lucene-core-2.4.1"在中文文本处理和搜索领域扮演着重要角色。通过合理地集成和配置这两...

    Lucene实现全文检索

    这篇博文将深入探讨如何使用Lucene来实现全文检索。 **一、Lucene的基本概念** 1. **索引(Indexing)**:Lucene的核心工作流程之一是创建索引。索引是一个结构化的数据存储,类似于图书馆的目录,能够快速定位到...

    lucene3.5全文检索案例lucene+demo

    本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...

    lucene:基于Java的全文检索引擎简介

    ### 基于Java的全文检索引擎Lucene简介 #### 1. Lucene概述与历史背景 Lucene是一个开源的全文...通过深入理解Lucene的设计理念和技术实现,开发者可以获得宝贵的实践经验,从而在实际项目中更好地应用全文检索技术。

    Lucene-core-2.0.0

    作者保证了这个压缩包的安全性,用户可以放心下载并解压,解压后得到的"Lucene-core-2.0.0.jar"是实际使用的Java库文件。 **Lucene知识点详解** 1. **Lucene概述**: Lucene是Apache软件基金会的一个开放源代码项目...

    Lucene文件检索实战项目

    Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的...

    Lucene 全文检索

    **Lucene 全文检索** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个简单但功能强大的 API,可以方便地集成到 Java 应用程序中,实现对文本数据的...

    Lucene 4.8全文检索引擎入门示例文档

    《Lucene 4.8 全文检索引擎入门详解》 Lucene 是一款开源的全文检索库,由 Apache 软件基金会维护。在版本 4.8 中,Lucene 提供了强大的文本分析、索引构建和搜索功能,使得开发者能够轻松地在应用程序中集成高效的...

    Lucene检索数据库支持中文检索

    ### Lucene检索数据库支持中文检索 #### 一、Lucene简介与原理 ##### 1. Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java编写而成。其核心功能是为开发者提供构建搜索应用程序的基础框架。Lucene...

    使用Lucene.net进行全文搜索

    在IT行业中,全文搜索引擎的使用越来越广泛,特别是在大数据和内容检索领域。Lucene.NET是Apache Lucene项目的一个.NET版本,它提供了一个高效、可扩展的全文搜索库,适用于各种应用程序。本文将深入探讨如何使用...

    LuceneUtils_lucenejava_全文检索_lucene_

    本文将深入探讨如何使用LuceneJava来创建中文索引并实现全文检索。 一、Lucene简介 Lucene最初由Doug Cutting创建,其核心功能包括文本分析、索引构建、查询解析和结果排序。Lucene为开发者提供了一个高效的、可...

    lucene-5.5.3.zip

    Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现全文搜索功能的工具。...通过深入理解和实践Lucene 5.5.3,开发者可以构建出高效、可扩展的全文检索系统,满足各种复杂的搜索需求。

    Java全文检索引擎Lucene的应用.pdf

    接下来,系统使用语言解析器对文档中的内容进行分词处理,生成一系列Token(最小的索引单元)。最后,这些Token经过索引器处理后加入到索引库中,由存储器负责管理和存储数据。 2. **检索索引库**:检索过程从输入...

    一步一步跟我学习lucene(11)---lucene搜索之高亮显示highlighter

    Lucene是一个高性能、全文检索库,它是Apache软件基金会的顶级项目之一。它提供了一个可扩展的搜索和索引框架,开发者可以利用这个框架快速地在自己的应用程序中构建强大的搜索功能。 **二、高亮显示的重要性** ...

    利用lucene实现文档关键字检索

    通常,我们需要先对检索结果的每个文档内容进行分析,生成一个TextFragment对象,然后使用Highlighter的getBestFragments方法生成高亮后的文本片段。 在实际应用中,可能还需要考虑一些优化策略,比如使用近实时...

    基于Java的全文检索引擎Lucene的分析与研究

    - **Cocoon**:一个基于XML的Web发布框架,其中的全文检索部分使用了Lucene。 - **Eclipse**:一个知名的Java开发平台,其帮助文档的全文索引功能就是基于Lucene实现的。 #### 五、Lucene的下载与配置 **1. 下载:...

    基于Lucene的搜索系统-客户端调用

    Lucene是一个高性能、全文检索库,它提供了丰富的API供开发者使用,能够帮助我们建立强大的搜索引擎。而在这个系统中,同时采用了Paoding这个专门针对中文的分词工具,以提升中文搜索的准确性和效率。 首先,我们...

    lucene-7.3.0

    通过了解和掌握Apache Lucene 7.3.0的核心特性和使用方法,开发者能够构建出强大、高效的全文检索系统,满足各种复杂的搜索需求。无论是企业级应用还是个人项目,Lucene都是值得信赖的文本搜索解决方案。

Global site tag (gtag.js) - Google Analytics