Lucene对pdf、word、html等文件的处理


Lucene在创建索引的过程中,原生只支持纯文本格式(但是你扫描的过程中,如果你不设定文件格式,会发现不管啥文件,他都会去啃两口)

=====PDF

用到的库:PDFBox / XPdf

PDFBox是一个在java环境中对pdf文件进行解析处理的开源软件,同时它也提供了一个丰富的类库支持对pdf文件的操作。PDFBox为使 用Lucene的开发者专门提供了LucenePDFDocument类,它的static方法getDocument(ps:该方法被重载三次)能够直 接返回一个Lucene的Document类型结果。所以在为一个pdf文件(例子中为File类型实例pdfFile)创建索引时只要写下如下语句就可 以了:

Document document = LucenePDFDocument.getDocument(file);

该方法传入参数file是一个pdf文件,返回一个lucene的document对象。

PDFBox 提供的下载包是0.7.3版本,这个版本里面有上面那个函数的所在的jar。最新的pdfbox在apache的官网下载,里面已经没有上面所要用到的jar包。

=====WORD

用到的库:tm-extractors-0.4

主要用到了WordExtractor类的成员方法extractor,该方法用来抽取word文件的内容,并返回。

需要自己构建getDocument函数,来构建lucene的document对象。

参考如下代码:

public   class  LuceneDOCDocument  { 
 
      public   static  Document getDocument(File doc) {
         String docPath  =  doc.getAbsolutePath();
         String title  =  doc.getName();
         InputStream inputStream  =   null ;
         Reader contents  =   null ;
         Document document  =   new  Document();
          try 
          {
             inputStream  =   new  FileInputStream(doc);
         } 
          catch  (FileNotFoundException e)
          {
             e.printStackTrace();
         } 
         WordExtractor extractor  =   new  WordExtractor();
          try {
             contents  =   new  StringReader(extractor.extractText(inputStream));
         } 
          catch (Exception e) {
             e.printStackTrace();
         } 
     
         document.add( new  Field( " title " , title, Field.Store.YES, Field.Index.TOKENIZED));
         document.add( new  Field( " contents " , contents));
         document.add( new  Field( " path " , docPath, Field.Store.YES, Field.Index.NO));
          return  document;
     } 
 
 }

=====HMTL/XML等文件

HTML,XML等文件虽然是纯文本形式存在,但是由于其内部是有一些标签的,而lucene在读取这些文件的时候,会将标签也当做内容读取,所以在处理这些文件的时候需要对其进行一个去标签操作。

用到的库:htmlparser


参考如下代码:

public   class  LuceneHTMLDocument {
 
      public   static  Document getDocument(File html) {
         String htmlPath  =  html.getAbsolutePath();
         String text  =   "" ;
         Parser parser  =   null ;
          try {
             parser  =   new  Parser(htmlPath);
         } 
          catch (ParserException e) {
             e.printStackTrace();
         } 
          try {
             parser.setEncoding( " UTF-8 " );
         } 
          catch (ParserException e) {
             e.printStackTrace();
         } 
         HtmlPage visitor  =   new  HtmlPage(parser);
          try {
             parser.visitAllNodesWith(visitor);
         } 
          catch (ParserException e) {
             e.printStackTrace();
         } 
         NodeList nodes  =  visitor.getBody();
          int  size  =  nodes.size();
          for ( int  i = 0 ;i < size;i ++ ) {
             Node node  =  nodes.elementAt(i);
             text  +=  node.toPlainTextString();
         } 
         String title  =  visitor.getTitle();
         Reader contents  =   new  StringReader (text);
         Document document  =   new  Document();
         document.add( new  Field( " title " , title, Field.Store.YES, Field.Index.TOKENIZED));
         document.add( new  Field( " contents " , contents));
         document.add( new  Field( " path " , htmlPath, Field.Store.YES, Field.Index.NO));
          return  document;
     } 
 
 }

小工具:索引文件查看器Luke。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lucene是一个开源的全文搜索引擎工具包,它提供了丰富的API和工具,可以用于创建和管理全文索引。Lucene的源码是以Java编写的,其主要目的是为了提供高效的文本搜索和索引功能。 在Lucene的源码中,最核心的组件是索引和搜索。索引是指将文本数据分解为若干个文档(Document),然后对每个文档建立一种倒排索引结构。所谓倒排索引,是指通过某个关键词直接找到包含该关键词的文档,而不是通过文档去找关键词。这种倒排索引结构能够提供快速的搜索和检索功能。 Lucene的源码还包含一些高级的搜索功能,例如搜索结果的排序和评分。排序是指根据某种规则,将搜索结果按相关性或其他因素进行排序,以便更好地展示给用户。评分是指根据某种算法,为搜索结果打分,以衡量其与查询的相关性。这些高级搜索功能可以根据用户的需求进行定制和扩展。 此外,Lucene的源码还包含了一些辅助功能,例如分词器(Tokenizer)和过滤器(Filter)。分词器用于将输入的文本数据拆分为词组,并去除无关的符号和停用词。过滤器则用于对已经拆分的词组进行处理,例如大小写转换、同义词替换等。 总体来说,Lucene的源码是非常庞大和复杂的,其中包含了大量的算法和数据结构。研究和理解Lucene的源码需要对Java编程和搜索引擎原理有一定的了解。通过对源码的阅读和分析,可以更好地理解Lucene的工作机制,并能够根据自己的需求进行二次开发和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值