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

来源:互联网 发布:王者荣耀 世界观 知乎 编辑:程序博客网 时间:2024/04/29 14:33

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 0
原创粉丝点击