POIOfficeExtractor.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:7k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter9;
  2. import org.apache.lucene.analysis.Analyzer;
  3. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  4. import org.apache.lucene.document.Document;
  5. import org.apache.lucene.document.Field;
  6. import org.apache.lucene.index.IndexWriter;
  7. import org.apache.lucene.index.Term;
  8. import org.apache.lucene.search.Hits;
  9. import org.apache.lucene.search.IndexSearcher;
  10. import org.apache.lucene.search.Query;
  11. import org.apache.lucene.search.TermQuery;
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  13. import org.apache.poi.hssf.usermodel.HSSFSheet;
  14. import org.apache.poi.hssf.usermodel.HSSFRow;
  15. import org.apache.poi.hssf.usermodel.HSSFCell;
  16. import org.apache.poi.hwpf.extractor.*;
  17. import org.apache.poi.hwpf.HWPFDocument;
  18. import org.apache.poi.hwpf.model.*;
  19. import org.apache.poi.hwpf.usermodel.*;
  20. import org.pdfbox.searchengine.lucene.LucenePDFDocument;
  21. //import LuceneBook.ChineseAnalyzer;
  22. import java.io.FileInputStream;
  23. import java.io.File;
  24. import java.io.IOException;
  25. import java.io.InputStream;
  26. public class POIOfficeExtractor {
  27. public static String xlsfileToBeRead="D:\workshop\docs\books.xls";
  28. public static String docfileToBeRead="D:\workshop\docs\softwarerequest.doc";
  29. private static String Dest_Index_Path = "D:\workshop\index";
  30. /*================================================================
  31.  * 名 称:DocQueryIndex
  32.  * 功 能:构造Doc文档检索查询器,对指定的索引进行查询。
  33.  ===============================================================*/
  34. public static void DocQueryIndex(){
  35. try {
  36. IndexSearcher searcher = new IndexSearcher(Dest_Index_Path); // 生成检索器对象
  37. Term term = new Term("名称","doc");                      // 检索关键字
  38. Query query = new TermQuery(term);                           // 生成检索对象
  39. System.out.println("----------检索内容:"+query.toString()+"----------");
  40. Hits hits = searcher.search(query);                          // 提交检索
  41. System.out.println("----------检索结果: 共检索到 "+hits.length()+" 条 ----------");
  42. for(int i=0; i < hits.length(); i++)                         // 获得结果
  43. {
  44. System.out.println(hits.doc(i));
  45. System.out.println(hits.doc(i).getField("id"));
  46. }
  47. }catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. System.out.println("----------索引检索:PDF索引查询成功----------");
  51. }
  52. /*================================================================
  53.  * 名 称:DocIndexBuilder
  54.  * 功 能:构造Doc磁盘索引,添加内容到指定目录,为后续检索查询做好准备。
  55.  ===============================================================*/
  56. public static void DocIndexBuilder(){
  57. try {
  58. //Analyzer TextAnalyzer = new StandardAnalyzer();                   // 生成分析器
  59. Analyzer TextAnalyzer = new ChineseAnalyzer();
  60. IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true); // 生成索引器
  61.         TextIndex.setUseCompoundFile(true);
  62. Document document = new Document() ;                              // 由Office文件生成文档对象
  63.     FileInputStream in = new FileInputStream(new File(docfileToBeRead));
  64.      
  65.     HWPFDocument doc = new HWPFDocument(in);
  66.     Range range = doc.getRange();
  67.     String text = range.text(); 
  68.     
  69. Field field_doc = new Field("doc", text, 
  70. Field.Store.YES,Field.Index.TOKENIZED);
  71. document.add(field_doc);
  72. System.out.println("----------创建索引:Office 文件内容  ----------");
  73. //System.out.println(document);
  74. TextIndex.addDocument(document);                                // 添加文档到索引
  75. TextIndex.optimize();
  76. TextIndex.close();                                              // 索引完毕
  77. }catch (IOException e) {
  78. e.printStackTrace();
  79. }
  80. System.out.println("----------创建索引:Office 文件成功. ----------");
  81. }
  82. public static void GetWordDetail(String filename) throws Exception
  83. {
  84.      FileInputStream in = new FileInputStream(new File(filename));
  85.      
  86.      HWPFDocument doc = new HWPFDocument(in);
  87.      Range range = doc.getRange();
  88.      String text = range.text(); 
  89. for(int i=0;i < range.numParagraphs();i++ ){ 
  90. Paragraph p = range.getParagraph(i);   //取得每个段落 
  91. //组合文字并添加换行 
  92. text = p.text(); 
  93. text.trim();
  94. //text = " <br> " ;
  95.     System.out.println( text );
  96. }
  97. }
  98. // 获取doc内纯文本信息
  99. public static void GetWordContent(String filename) throws Exception
  100. {
  101.      FileInputStream in = new FileInputStream(new File(filename));
  102.      
  103.      WordExtractor extractor  = new WordExtractor(in);   // 创建WordExtractor
  104.      String text = extractor.getText();                  // 对DOC文件进行提取
  105.      System.out.println( text );
  106. }
  107. public static void GetWordHWPFDocument(String filename) throws Exception
  108. {
  109. InputStream in = new FileInputStream(new File( "c:\test.doc ")); //流入doc文档 
  110. HWPFDocument wordDocument = new HWPFDocument(in); //通过流得到文档类型 
  111. Range range = wordDocument.getRange(); //取得文档篇幅 
  112. int total = range.numParagraphs();     //文档内的总段落数 
  113. String content = " ";//文章内容 
  114. for(int i=0;i <total;i++ ){ 
  115. Paragraph p = range.getParagraph(i);   //取得每个段落 
  116. //组合文字并添加换行 
  117. content = p.text(); 
  118. content = " <br> " ;
  119. }
  120. // 获取Excel内纯文本信息
  121. public static void GetExcelContent(String filename) throws Exception
  122. {
  123. // 创建对指定Excel工作文件的引用
  124. HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
  125. HSSFSheet sheet = workbook.getSheetAt(0);               // 创建对工作表的引用。
  126. for( int i =0 ; i < workbook.getNumberOfSheets() ; i++ ) // 循环取表单对象
  127. {
  128. System.out.print("########## sheet:--" + i + " --########## " );
  129. sheet = workbook.getSheetAt(i);                      // 查阅文档的Sheet属性
  130. if( sheet != null )
  131. {
  132. for(int m = 0; m < sheet.getLastRowNum(); m++ )  //  按行循环取行对象
  133. {
  134. HSSFRow row = sheet.getRow(m);
  135. if( row == null){ break;}
  136. System.out.println("");
  137. if(row.getLastCellNum() <= 0) break;
  138. System.out.println(  "-----line:--" + m + " ---- ,col num:" 
  139.            + row.getLastCellNum());
  140. for(int n = 0; n < row.getLastCellNum(); n++) // 按列循环取单元格对象
  141. {
  142. HSSFCell cell = row.getCell((short)n);
  143. if( cell == null){ break; }
  144. int type = cell.getCellType();
  145. switch(type)
  146. {     case 0:
  147. System.out.print( cell.getNumericCellValue() + " , "); 
  148. break;
  149.       case 1:
  150. System.out.print(cell.getStringCellValue() + " , "); 
  151. break;
  152.       case 2:
  153. break;
  154.       case 3:
  155. System.out.print( " , "); 
  156. break;
  157.   default:
  158.   System.out.print("未知的单元类型" + type+" , ");
  159. }
  160. }
  161. }
  162. }
  163. System.out.println();
  164. }
  165. }
  166. public static void main(String argv[]){ 
  167. try{
  168. //GetExcelContent(xlsfileToBeRead);
  169. //GetWordContent(docfileToBeRead);
  170. GetWordDetail(docfileToBeRead);
  171. //DocIndexBuilder();
  172. //DocQueryIndex();
  173.    }catch(Exception e) {
  174.    System.out.println("运行错误 : " + e );
  175.   }
  176.  }
  177. }