背景:全文检索项目需要处理一些非文本文档格式的文件,提取其中的内容,已便建索引。比如html、pdf、office系列等。
本文总结一下对pdf和office系列 格式的文件内容提取的调研。
一、word/ppt/excel 文本提取调研
主要调研的是 apache 的 poi ;
1、官方网站 http://poi.apache.org/ ;最新的版本是 3.8 beta 2;下载地址:http://www.apache.org/dyn/closer.cgi/poi/dev/bin/poi-bin-3.8-beta2-20110408.zip
2、apache官方关于poi text extractor 的介绍:
支持各种版本文件的提取.doc .docx .xls .xlsx .ppt .pptx,甚至更老版本的 Word 6 和 Word 95 文件;
支持 .vsd .pub 文件的提取
支持提取嵌入到office文件中的文件的内容;
3、demo验证的结果:(使用的poi 3.8 beta2版本)
支持 各版本的文档,97-2003的 doc xls ppt , 2007后的 docx pptx xlsx
支持 英文 中文简体 中文繁体,三者混合文档也能成功提取全文
可以提取大纲
支持提取 文档基本信息,如 作者 等;
PS:未验证对office文档中各对象的识别和提取
二、pdf文档文本提取调研
主要看了两个开源项目 xpdf, 和apache 的 pdfbox;
demo验证结论:
都支持英文、中文简体 、中文繁体;xpdf 速度快,但提供的功能较简单,用C++开发;pdfbox 因为解析了pdf的格式,速度相对xpdf慢,但功能强大,使用提供的jar包即可做开发;
两者详细对比见下表:
PDFBOX | XPDF | |
概要 |
Apache
开源项目
,
提供开发
jar
包;文档较齐;
|
开源软件,用
C/C++
开发,可以获取源码
,
无文档;不提供开发包;使用命令行提取文本
|
使用方法 |
1、 使用
jar
包自己开发
2、 使用命令行(未测试)
如
usage: java -jar pdfbox-app-x.y.z.jar ExtractText [OPTIONS] [Text file]
|
安装xpdf, 使用pdftotext程序,配置xpdfrc文件,安装语言包 |
提取全文
处理时长
pdf
文件大小
:8763KB
|
加载文件到内存
Time for Loading PDF: 2.094 seconds
;
提取全文:
Time for extraction: 16.781 seconds
|
command line
命令执行时长:加载文件到内存
Time for execute cmd: 0.031 seconds;
从内存逐行读取文本
Time for reading buffer: 5.219 seconds
|
英文支持 | 支持 | 支持 |
中文简体支持 | 支持 | 支持 |
中文繁体支持 | 支持,个别内容会读出乱码 | 支持,个别内容会读出乱码 |
其他语言支持 | 未测试 |
提供的语言包
(
未测试
)
Arabic:
阿拉伯
Chinese/simplified:
中文简体
Chinese/traditional:
中文繁体
Cyrillic:
西里尔字母
Greek:
希腊
Hebrew:
希伯来语
Japanese:
日文
Korean:
韩文
Latin2:
拉丁
Thai:
泰文
Turkish
土耳其
|
加解密 | 支持,未测试 | 支持,未测试 |
格式读取 |
较全面的
api
;
可以:提取
metadata
文档信息;提取
outline
大纲;提取全文;其他未测试
|
只支持全文提取
;
文档信息可用
pdfinfo
程序读出;
其他无
|
三、调研了下如何检测文本文件(字节流)的编码方式;
主要看了两个开源的项目 jchardet 和 juniversalchardet
jchardet 和 juniversalchardet 都是mozilla的探测字符集编码库的java版本;
jchardet 用的是mozilla的 chardet 库,juniversalchardet 是用的mozilla的 universalchardet库;
jchardet 库比较老了,universalchardet库是比较新的,据juniversalchardet 官网介绍,universalchardet库的识别准确度更高;
jchardet 的官网 是 http://jchardet.sourceforge.net/index.html; 最新版本是 1.1;
juniversalchardet 的官网: http://code.google.com/p/juniversalchardet/ ,最新版本是1.0.3;
jchardet 用的是mozilla的 chardet 库,juniversalchardet 是用的mozilla的 universalchardet库;
jchardet 库比较老了,universalchardet库是比较新的,据juniversalchardet 官网介绍,universalchardet库的识别准确度更高;
jchardet 的官网 是 http://jchardet.sourceforge.net/index.html; 最新版本是 1.1;
juniversalchardet 的官网: http://code.google.com/p/juniversalchardet/ ,最新版本是1.0.3;
用juniversalchardet-1.0.3.jar 做了个简单的demo,测试用的几个文本文档都能其字符集;
jchardet没有验证;
四、 OCR调研(进行中)
鉴于pdf文档有很多并不是标准的文档格式制作的,例如用图片做成的pdf文档,这种文档的数量也比较多;于是准备研究一些OCR开源项目,看能否提取其中的文本出来;
现在找了两个,一个是 ocropus ,一个是 tesseract-ocr;正在研究中