当前位置: 代码迷 >> 综合 >> [Step By Step] Tika 使用介绍 (Tika 0.5)
  详细解决方案

[Step By Step] Tika 使用介绍 (Tika 0.5)

热度:42   发布时间:2024-01-09 19:35:07.0
[b]1. Tika是什么[/b]
Tika是Lucene的一个子项目。
Tika是一个集合,用于处理各种格式化的文档,如doc(x), xls(x), ppt(x), jpg, pdf, etc. 它本身的core可以自动判别文件类型(AutoDetectParser类),也定义了统一的接口(the parse interface),外部接挂了各种处理不同格式文档的parser实现(implementation)。

[b]2. Tika安装向导[/b]
使用了Maven2的编译生成的Tika,其源码可以在[url]http://lucene.apache.org/tika/[/url]下到。不过默认不提供生成的jar档案,需要自己用Maven2生成。因此如果读者没配置过Maven2,还需要首先去[url]http://maven.apache.org/download.html[/url]下载Maven2,笔者当前使用的是Maven2.2.1。

[b]2.1 安装Maven2[/b]
在Windows下,解压获得的apache-maven-2.x.x-bin.zip至你想要安置Maven2的目录,比如笔者解压至了"D:\Library\",那么D:\Library\apache-maven-2.2.1是Maven2的根目录
去配置名为M2_HOME的环境变量为上述路径;如果是2.0.9版本则需注意路径最后一个字符不能是'\';继续配置名为M2的环境变量为"%M2_HOME%\bin";可选配置则是MAVEN_OPTS,可以把JVM的内存选项填上去:-Xms256m -Xmx512m。最后在Path系统环境变量中添加%M2%一项。
如果还没有装JDK,当然需要把JDK给装上,并且设置了JAVA_HOME环境变量和Path环境变量中包括的%JAVA_HOME%\bin。
经过上述步骤,在cmd中键入mvn --version看看是否正确输出。
UNIX-like系统可以参考下载页的installation instructions,过程都差不多。
[b]2.2 生成Tika目标文件[/b]
把Tika解压到某特定目录,比如笔者的D:\Library则根目录是D:\Library\tika-0.5。cmd进入该目录,执行mvn clean install,经过耐心等待,就可以在tika-core目录下发现新增了一个target目录,该目录下有一个jar文件tika-core-0.5.jar,这就是我们要的了。不过我们并未同时发现tika-app和tika-parsers下的对应jar,不过没关系,依葫芦画瓢,进入该二目录,各自执行mvn install,就可以得到各自的jar档案,分别是tika-app-0.5.jar和tika-parsers-0.5.jar。
上述三个jar文件,tika-core-0.5.jar([url=http://dl.iteye.com/topics/download/b084491a-cdba-36c9-b511-cef7a8c37fd3]附件下载[/url])是tika的核心和接口,不包括parser实现,后者包含在tika-parsers-0.5.jar([url=http://dl.iteye.com/topics/download/c08bf639-956f-336b-bb9f-39eb6f44465d]附件下载[/url])中,各类文档的解析类,实现了core中定义的接口。至于tika-app-0.5.jar,则是可执行的jar。下文将给出使用方法。

[b]3. 初步使用[/b]
无疑,作为一个程序(命令行)来使用是最直接最简单的。进入app的jar所在的目录,运行java -jar tika-app-0.5.jar -?看看都有哪些用法吧,这里就不全部介绍了。比如笔者随意拿了一个xls文档,运行java -jar tika-app-0.5.jar -t test.xls,就可以看到xls里的文本内容了,还是以类似表格方式列印在控制台的,中文也没有问题。

[b]4. 程序调用[/b]
主要的接口类就是[url=http://lucene.apache.org/tika/apidocs/org/apache/tika/parser/Parser.html]org.apache.tika.parser.Parser[/url]的
	void parse(InputStream stream, ContentHandler handler, Metadata metadata)throws IOException, SAXException, TikaException;

parser接受一个流作为文档输入,一个org.xml.sax.ContentHandler作为内容格式输出。parser默认使用XHTMLContentHandler来产生XHTML输出。但通常需要指定一个ContentHandler来生成所需要的输出。Tika已经为我们实现了一些ContentHandler类,比如BodyContentHandler用来提取XHTML输出的body部分,以填入SAX事件供另外的ContentHandler处理,或者给出提取字符至输出流、writer或字符串。
ContentHandler handler = new BodyContentHandler(System.out);
parser.parse(System.in, handler, ...);

以上片段使用系统标准输入作为文档,把提取的文本内容发至标准输出。
另一个有用的方式是使用ParsingReader,解析文档,返回文本内容的字符流:
	InputStream stream = ...; // the document to be parsed
Reader reader = new ParsingReader(parser, stream, ...);
try {
...; // read the document text using the reader
} finally {
reader.close(); // the document stream is closed automatically
}

值得注意的是,maven生成的tika的jar包是有依赖于几个其他的包的,包括dom4j, xbeans, apache-poi, PDFBox等。在建立工程的时候需要引入相关的jar。

最后附一个可运行的简单Demo:
public class TikaDemo {
   
public static String PATH = "E:\\0104-0110工作计划.docx";
public static String OUTPATH = PATH+".OUT";
/**
* @param args
* @throws TikaException
* @throws SAXException
* @throws IOException
*/
public static void main(String[] args) throws IOException, SAXException, TikaException {
Parser parser = new OOXMLParser();
InputStream iStream = new BufferedInputStream(new FileInputStream(new File(PATH)));
OutputStream oStream = new BufferedOutputStream(new FileOutputStream(new File(OUTPATH)));
ContentHandler iHandler = new BodyContentHandler(oStream);
parser.parse(iStream, iHandler, new Metadata(), new ParseContext());

}

}
  相关解决方案