- 浏览: 565424 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
lucene开发中有关读取pdf,html,word,rtf,txt,powerpoint,excel等文档的操作(转)
- 博客分类:
- lucene
关于这七种文档,我相信应该是最常用的文档了
在以下的介绍中会提到POI,现介绍下POI吧
poi处理WORD,EXCEL比较好:http://jakarta.apache.org/poi/
poi处理至少需要如下几个JAR包
PDFbox处理PDF比较好:http://pdfbox.apache.org/download.html
下面一一介绍了
第一和第二是只支持03版的word和excel文档
第一、首先来看WORD文档:
我这里用的是poi,相关jar包自己去下载,然后加到工程中(以下所要用的jar包也是,不再重复说)
public static String readWord(String path) throws Exception { String bodyText = null; try { FileInputStream is = new FileInputStream(path); bodyText = new WordExtractor(is).getText(); } catch (Exception e) { System.out.println("======="); } return bodyText; }
第二、Exel的文档
public static String ReadExcel(String path) throws IOException { InputStream inputStream = null; String content = null; try { inputStream = new FileInputStream(path); HSSFWorkbook wb = new HSSFWorkbook(inputStream); ExcelExtractor extractor = new ExcelExtractor(wb); extractor.setFormulasNotResults(true); extractor.setIncludeSheetNames(false); content = extractor.getText(); } catch (FileNotFoundException e) { e.printStackTrace(); } return content; }
针对07版的word和excel的操作
package com.test;
/** * 需要的jar包: * poi-3.0.2-FINAL-20080204.jar * poi-contrib-3.0.2-FINAL-20080204.jar * poi-scratchpad-3.0.2-FINAL-20080204.jar * poi-3.5-beta6-20090622.jar * geronimo-stax-api_1.0_spec-1.0.jar * ooxml-schemas-1.0.jar * openxml4j-bin-beta.jar * poi-ooxml-3.5-beta6-20090622.jar * xmlbeans-2.3.0.jar * dom4j-1.6.1.jar */ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.xmlbeans.XmlException; public class WordAndExcelExtractor { public static void main(String[] args){ try{ String wordFile = "D:/松山血战.docx"; String wordText2007 = WordAndExcelExtractor.extractTextFromDOC2007(wordFile); System.out.println("wordText2007======="+wordText2007); InputStream is = new FileInputStream("D:/XXX研发中心技术岗位职位需求.xls"); String excelText = WordAndExcelExtractor.extractTextFromXLS(is); System.out.println("text2003==========" + excelText); String excelFile = "D:/Hello2007.xlsx"; String excelText2007 = WordAndExcelExtractor.extractTextFromXLS2007(excelFile); System.out.println("excelText2007==========" + excelText2007); }catch(Exception e ){ e.printStackTrace(); } } /** * @Method: extractTextFromDOCX * @Description: 从word 2003文档中提取纯文本 * * @param * @return String * @throws */ public static String extractTextFromDOC(InputStream is) throws IOException { WordExtractor ex = new WordExtractor(is); //is是WORD文件的InputStream return ex.getText(); } /** * @Method: extractTextFromDOCX * @Description: 从word 2007文档中提取纯文本 * * @param * @return String * @throws */ public static String extractTextFromDOC2007(String fileName) throws IOException, OpenXML4JException, XmlException { OPCPackage opcPackage = POIXMLDocument.openPackage(fileName); POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage); return ex.getText(); } /** * @Method: extractTextFromXLS * @Description: 从excel 2003文档中提取纯文本 * * @param * @return String * @throws */ @SuppressWarnings("deprecation") private static String extractTextFromXLS(InputStream is) throws IOException { StringBuffer content = new StringBuffer(); HSSFWorkbook workbook = new HSSFWorkbook(is); //创建对Excel工作簿文件的引用 for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) { if (null != workbook.getSheetAt(numSheets)) { HSSFSheet aSheet = workbook.getSheetAt(numSheets); //获得一个sheet for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) { if (null != aSheet.getRow(rowNumOfSheet)) { HSSFRow aRow = aSheet.getRow(rowNumOfSheet); //获得一行 for (short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) { if (null != aRow.getCell(cellNumOfRow)) { HSSFCell aCell = aRow.getCell(cellNumOfRow); //获得列值 if(aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ content.append(aCell.getNumericCellValue()); }else if(aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){ content.append(aCell.getBooleanCellValue()); }else { content.append(aCell.getStringCellValue()); } } } } } } } return content.toString(); } /** * @Method: extractTextFromXLS2007 * @Description: 从excel 2007文档中提取纯文本 * * @param * @return String * @throws */ private static String extractTextFromXLS2007(String fileName) throws Exception{ StringBuffer content = new StringBuffer(); //构造 XSSFWorkbook 对象,strPath 传入文件路径 XSSFWorkbook xwb = new XSSFWorkbook(fileName); //循环工作表Sheet for(int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++){ XSSFSheet xSheet = xwb.getSheetAt(numSheet); if(xSheet == null){ continue; } //循环行Row for(int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++){ XSSFRow xRow = xSheet.getRow(rowNum); if(xRow == null){ continue; } //循环列Cell for(int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++){ XSSFCell xCell = xRow.getCell(cellNum); if(xCell == null){ continue; } if(xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN){ content.append(xCell.getBooleanCellValue()); }else if(xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC){ content.append(xCell.getNumericCellValue()); }else{ content.append(xCell.getStringCellValue()); } } } } return content.toString(); } }
第三、PowerPoint的文档
public static String readPowerPoint(String path) { StringBuffer content = new StringBuffer(""); try { SlideShow ss = new SlideShow(new HSLFSlideShow(new FileInputStream( path)));// is // 为文件的InputStream,建立SlideShow Slide[] slides = ss.getSlides();// 获得每一张幻灯片 for (int i = 0; i < slides.length; i++) { TextRun[] t = slides[i].getTextRuns();// 为了取得幻灯片的文字内容,建立TextRun for (int j = 0; j < t.length; j++) { content.append(t[j].getText());// 这里会将文字内容加到content中去 } } } catch (Exception ex) { System.out.println(ex.toString()); } return content.toString(); }
第四、PDF的文档
public static String readPdf(String path) throws Exception { StringBuffer content = new StringBuffer(""); FileInputStream fis = new FileInputStream(path); PDFParser p = new PDFParser(fis); p.parse(); PDFTextStripper ts = new PDFTextStripper(); content.append(ts.getText(p.getPDDocument())); fis.close(); return content.toString().trim(); }第五、HTML的文档,要说明的是,HTML文档我们要获取其TITLE,BODY中的内容就要先获取源文件,然后再对源文件进行标签上的过滤,很麻烦
第六、TXT的文档,给TXT文本建立索引时要注意
本项目实现了组合查询的功能
//这一步如果不设置为GBK,TXT内容将全部乱码 BufferedReader reader=new BufferedReader(new InputStreamReader(is,"GBK")); 具体代码如下 public static String readTxt(String path) throws IOException {
StringBuffer sb = new StringBuffer("");
InputStream is = new FileInputStream(path);
// 必须设置成GBK,否则将出现乱码
BufferedReader reader = new BufferedReader(new InputStreamReader(is,
"GBK"));
try {
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line + "\r");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return sb.toString().trim();
}
第七、RTF文档,rtf的转换则在javax中就有
public static String readRtf(String path) { String result = null; File file = new File(path); try { DefaultStyledDocument styledDoc = new DefaultStyledDocument(); InputStream is = new FileInputStream(file); new RTFEditorKit().read(is, styledDoc, 0); result = new String(styledDoc.getText(0, styledDoc.getLength()) .getBytes("iso8859-1"), "gbk"); // 提取文本,读取中文需要使用gbk编码,否则会出现乱码 } catch (IOException e) { e.printStackTrace(); } catch (BadLocationException e) { e.printStackTrace(); } return result; }public static String readHtml(String urlString) {
StringBuffer content = new StringBuffer(""); File file = new File(urlString); FileInputStream fis = null; try { fis = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader( fis, "utf-8")); String line = null; while ((line = reader.readLine()) != null) { content.append(line + "\n"); } reader.close(); } catch (Exception e) { e.printStackTrace(); } String contentString = content.toString(); String htmlStr = contentString; // 含html标签的字符串 String textStr = ""; java.util.regex.Pattern p_script; java.util.regex.Matcher m_script; java.util.regex.Pattern p_style; java.util.regex.Matcher m_style; java.util.regex.Pattern p_html; java.util.regex.Matcher m_html; try { String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\ String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]* String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); m_script = p_script.matcher(htmlStr); htmlStr = m_script.replaceAll(""); // 过滤script标签 p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE); m_style = p_style.matcher(htmlStr); htmlStr = m_style.replaceAll(""); // 过滤style标签 p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); m_html = p_html.matcher(htmlStr); htmlStr = m_html.replaceAll(""); // 过滤html标签 textStr = htmlStr; } catch (Exception e) { System.err.println("Html2Text: " + e.getMessage()); } return textStr;// 返回文本字符串 }
发表评论
-
关于Lucene的讨论
2011-01-01 10:20 1065分类为[lucene]的文章 ... -
有关Lucene的问题(收藏)推荐
2010-12-30 21:02 1110有关Lucene的问题(1):为 ... -
Lucene 学习总结(收藏)推荐
2010-12-30 20:54 1563Lucene学习总结之一:全文检索的基本原理 ... -
基于Lucene的Compass 资源(收藏)
2010-12-29 18:29 11491.2、Compass相关网上资源 1、官方网站1: http ... -
Lucene 3.0.2索引文件官方文档(二)
2010-12-28 22:36 1010Deletable File A writer dy ... -
Lucene 3.0.2索引文件官方文档(一)
2010-12-28 22:34 1462Apache Lucene - Index File ... -
Lucene 3.0 索引文件学习总结(收藏)
2010-12-28 22:28 941lucene学习1——词域信息 ... -
Lucene 字符编码问题
2010-12-27 20:29 995现在如果一个txt文件中包含了ANSI编码的文本文件和Uni ... -
Lucene 字符编码问题
2010-12-27 20:20 1036现在如果一个txt文件中包含了ANSI编码的文本文件和Unic ... -
Annotated Lucene(源码剖析中文版)
2010-12-25 22:52 1266Apache Lucene是一个高性能(high-pe ... -
Lucene 学习推荐博客
2010-12-25 22:42 1035深未来deepfuturelx http://deepfut ... -
Lucene3.0 初窥 总结(收藏)
2010-12-25 22:16 1818【Lucene3.0 初窥】全文检索的基本原理 ... -
转:基于lucene实现自己的推荐引擎
2010-12-17 17:05 1058采用基于数据挖掘的 ... -
加速 lucene 的搜索速度 ImproveSearchingSpeed(二)
2010-12-17 17:01 1033本文 为简单翻译,原文在:http://wiki.apac ... -
加速 lucene 索引建立速度 ImproveIndexingSpeed
2010-12-17 16:58 1075本文 只是简单的翻译,原文 在 http://wiki.a ... -
lucene 3.0 中的demo项目部署
2010-12-15 22:02 977转自:bjqincy 1 在myEclipise 建立 ... -
Lucene 3.0.2 源码 - final class Document
2010-12-14 22:33 894package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - final class Field
2010-12-14 22:29 960package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - abstract class AbstractField
2010-12-14 22:28 1042package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - interface Fieldable
2010-12-14 22:28 1182package org.apache.lucene.do ...
相关推荐
JAVA 读取 WORD_EXCEL_POWERPOINT_PDF 文件的方法(poi) JAVA 读取 WORD_EXCEL_POWERPOINT_PDF 文件的方法是使用 Apache POI 库来实现的。POI 库是一个开放源代码的 Java 库,提供了对 Microsoft Office 文件格式...
《使用Lucene进行Word、Excel和PDF文档的正则表达式查询》 在现代信息处理中,搜索引擎扮演了至关重要的角色。Apache Lucene是一个高性能、全文检索库,它提供了强大的文本搜索功能。在这个主题中,我们将深入探讨...
在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在本文中,我们将探讨如何使用Lucene对这些文件类型进行全文检索的实现。 首先,为了实现全文...
在版本3.6中,它提供了强大的文件检索功能,支持对多种文件类型的搜索,包括PDF、Word、PPT、Excel、TXT、HTML和XML等。这个版本的Lucene已经过封装,使得开发者能够更方便地集成到自己的项目中,实现快速的全文检索...
本篇将深入探讨如何利用Lucene实现对Word、PPT、Excel、PDF和TXT等常见文件类型的全文检索。 首先,我们要理解什么是全文检索。全文检索是指在文档集合中,通过搜索文档中的所有词汇,找出包含特定查询词的文档。与...
例如,`.doc`和`.docx`文件使用Apache POI,`.pdf`文件使用PDFBox,`.txt`文件可以直接读取,`.pps`文件可能需要PowerPoint API来解析,但需要注意的是,不是所有文件格式都支持全文搜索,如图片或非文本文件。...
在Java编程中,读取PDF、Word和Excel等文件通常涉及到使用特定的库来处理不同格式的数据。以下是对这些操作的详细说明: 1. **读取PDF文件**: Java中,可以使用Apache PDFBox库来读取PDF文件。PDFBox提供了一套...
在本篇文章中,我们将深入探讨如何使用Lucene来搜索中文PDF文档,以及在这个过程中可能遇到的关键技术和挑战。 首先,我们要了解Lucene的核心概念。Lucene通过建立倒排索引来实现快速文本搜索。倒排索引是一种数据...
然而,Lucene本身并不直接支持对Office文档如Word或Excel的直接操作。要实现这样的功能,我们需要借助其他库,例如Apache POI或Jacob。本文将重点介绍如何使用Jacob库来处理Word文档。 Jacob是一个Java到COM桥接库...
在探讨“Lucene应用中Pdf文档文本数据提取方法研究”的主题下,我们深入研究了如何在基于Lucene的全文检索系统中高效处理和提取Pdf文档中的文本数据。Lucene作为一款开源的全文检索引擎,虽然提供了强大的全文检索...
Lucene3.4开发入门.pdf
它提供了强大的文本分析和索引能力,支持多种格式的文档,如 PDF、TXT、Office 文件(Word、Excel、PowerPoint)以及 HTML 等。 ### 1. Lucene 的基本概念 - **索引(Index)**: Lucene 首先对文档内容进行分析和...
PDF(Portable Document Format)是一种由Adobe Systems开发的文件格式,旨在保持文档的原始布局和样式,使其在不同的设备和操作系统之间可移植。PDF文件可以包含文本、图像、表格、超链接和其他多媒体元素。解析PDF...
2. **文档(Document)**:在Lucene中,一个文档代表要被搜索的信息源,可以是网页、电子邮件、数据库记录等。文档由多个字段(Field)组成,每个字段有特定的名称和内容。 3. **字段(Field)**:字段是文档的组成...
3. **文档和字段(Document and Fields)**:在Lucene.NET中,每个文档由一个或多个字段组成,每个字段都有特定的属性,如是否可被索引、是否存储原始值等。 4. **查询构造(Query Parsing)**:Lucene.NET支持多种...
iTextPDFExtractor.java ------ ----使用iText解析PDF 文档代码 PDFBoxHello.java ----------- --PDFBox测试代码 PDFBoxLuceneIndex.java ------ --PDFBox创建PDF文件的Lucene...-- POI处理Excel和Word文档代码
本文将深入探讨如何使用C#进行多格式文档(如Excel、Word、PowerPoint和PDF)的全文检索。 一、Excel全文检索 在C#中,可以使用Microsoft Office Interop库来操作Excel文件。首先,需要引用`Microsoft.Office....