从常见文档中提取纯文本内容

2012年11月02日 Java 暂无评论 阅读 6,751 views 次

要想使用Lucene检索office文档(word、excel、ppt等)、PDF、HTML文档,通常的处理策略是先从这些文档中提取出纯文本,然后再进行相关索引处理等。

一、从office中提取纯文本

从office文件中提取纯文本,可以使用POI(http://poi.apache.org/),最新版本为3.8。从office文件中提取纯文本方法很简单。只需要两行代码即可。

POITextExtractor extractor = ExtractorFactory.createExtractor(is);
 String contents = extractor.getText();

第一行中传入的is参数为office文件的inputstream。这里不分word、excle还是ppt,不区分03版还是07版,只需要将文件的inputStream传入此方法中。再使用extractor.getText()。得到的即为office文件的纯文本数据。

注意:有时候可能由于文件的源访问,导致提取的纯文本里面有一些特殊字符,可以使用下面的方法过滤掉。

/**
 * 过滤特殊字符
 * 
 * @param contents
 * @return
 */
 public static String filterSpecialChar(String contents) {
 contents = contents.replace('\u0003', '\u0000');
 contents = contents.replace('\u0004', '\u0000');
 contents = contents.replace('\u000b', '\u0000');
 contents = contents.replace('\u000c', '\u0000');
 contents = contents.replace('\u0007', '\u0000');
 contents = contents.replace('\u0008', '\u0000');
 contents = contents.replace('\u0013', '\u0000');
 contents = contents.replace('\u0014', '\u0000');
 contents = contents.replace('\u0015', '\u0000');
 contents = contents.replace('\u0016', '\u0000');
 contents = contents.replace('\u0020', '\u0000');
 return contents;
 }

二、从PDF中提取纯文本

从PDF中提取纯文本,可以使用PDFBox组件(http://pdfbox.apache.org/),最新版本为1.7.1。需要的jar包为:pdfbox、fontbox、jempbox等,最好再加上pdfbox-lucene。

如果使用了pdfbox-lucene的包,则不用自己写pdfbox的处理方法,直接调用相关方法(LucenePDFDocument类里面)就行了,这里介绍,如何手写实现,也很简单。

PDDocument pdfDocument = PDDocument.load(is);
if (pdfDocument.isEncrypted()) {
 // 仅仅尝试使用默认密码打开加密的PDF
 pdfDocument.decrypt("");
 }
// 创建一个writer用来作来存储文件正文
 StringWriter writer = new StringWriter();
 if (stripper == null) {
 stripper = new PDFTextStripper();
 } else {
 stripper.resetEngine();
 }
 stripper.writeText(pdfDocument, writer);
String contents = writer.getBuffer().toString();

上面is同样为PDF文件的inputStream。下面的contents为提取到的PDF的纯文本内容。

三、从HTML文件中提取正文

从HTML文件中提取正文,简单说就是去除HTML文件中的HTML标签,这处常用的方法有许多,如使用正则表达式、html parse等。这里我们使用JSOUP,这个更方便快捷。可以参考我以前写的一篇文章:使用JSOUP处理HTML文档

在获取到Document之后,使用String text = document.text(); 即可获取到纯文本数据。

用户头像

给我留言

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: