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

1. Tika是什么
Tika是Lucene的一个子项目。
Tika是一个集合,用于处理各种格式化的文档,如doc(x), xls(x), ppt(x), jpg, pdf, etc. 它本身的core可以自动判别文件类型(AutoDetectParser类),也定义了统一的接口(the parse interface),外部接挂了各种处理不同格式文档的parser实现(implementation)。

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

    2.1 安装Maven2
    在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,过程都差不多。
    2.2 生成Tika目标文件
    把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( 附件下载)是tika的核心和接口,不包括parser实现,后者包含在tika-parsers-0.5.jar( 附件下载)中,各类文档的解析类,实现了core中定义的接口。至于tika-app-0.5.jar,则是可执行的jar。下文将给出使用方法。

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

4. 程序调用
    主要的接口类就是 org.apache.tika.parser.Parser
	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());
		
	}

}

你可能感兴趣的:(apache,jdk,maven,XHTML,Lucene)