标签:style blog http color java 使用 os io
Apache Tika toolkit可以自动检测各种文档(如word,ppt,xml,csv,ppt等)的类型并抽取文档的元数据和文本内容。Tika集成了现有的文档解析库,并提供统一的接口,使针对不同类型的文档进行解析变得更简单。Tika针对搜索引擎索引、内容分析、转化等非常有用。
详见参见http://tika.apache.org/1.5/formats.html
Tika通过一个parser和一个contentHandler来进行文档分析和处理,其中parser负责解析具体的文档,当解析到需要进行处理的时候,调用contentHandler进行解析内容的处理。contentHandler(org.xml.sax)是一个用于处理sax解析的程序接口,当parser解析到某些内容时(如节点之间的信息,以及节点本身的信息)时,便会根据需要去调用contentHandler的相关处理方法。即一个负责解析,一个负责处理,两者相互协作,最终将信息通过一定的手段返回回来。
Parser是一个接口,对不同的文档进行处理时,需要寻找具体的解析器来实现具体的解析工作。Tika通过MimeType来实现对一个文档的具体识别工作,即识别出一个文档是什么样的类型,然后再根据类型寻找相应的parser。最后调用具体实现的parser来完成parse工作。
ContentHandler也是一个接口,对不同的信息进行处理时,需要自己调用具体的信息处理类。一般来说,如果只关心文档内的内容(即有信息的地方),可以使用WriteOutContentHandler。这个handler将所以被解析到的信息通过一个output或write输出到调用者提供的输出流中,这样最终可以读取这个writer中的数据。
除这些信息之外,还有一些信息需要在处理的过程中被解析和保存,比如一个文档的标题,作者以及contentType等。在tika中,这些信息被保存在一个叫Metadata的对象中。metadata保存了很多与具体文档相关的值,它以一个map的形式,保存相应的元数据信息值。如对于word,它会保存其中的Author,Keywords这些信息。这些信息对于用一些关键信息进行文档检索非常有用。
org.apache.tika.parser.Parser
/*
	 * 
	 * 解析一个文件流成一个序列的XHTML SAX事件
	 * 
	 * 在指定的metadata对象中填充文档相关的元数据信息
	 * 
	 * 解析后不会关闭文档流,关闭文档流由调用者负责
	 * 
	 * @param stream the document stream (input)
     * @param handler handler for the XHTML SAX events (output)
     * @param metadata document metadata (input and output)
     * @param context parse context
     * @throws IOException if the document stream could not be read
     * @throws SAXException if the SAX events could not be processed
     * @throws TikaException if the document could not be parsed
     */
    void parse(
            InputStream stream, ContentHandler handler,
            Metadata metadata, ParseContext context)
            throws IOException, SAXException, TikaException; 
org.xml.sax.ContentHandler
这是大多数SAX应用程序要实现的接口。
     如果应用程序需要得到基本分析事件的通知,它需要实现这个接口,并用SAX parser注册一个实例。
 解析器使用这个实例报告文档相关的事件如element的start,end
  
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
public class WordParserDemo {
	public static final String INPATH = "E:/test.xlsx";
	public static final String OUTPATH = "data.txt";
	public static void main(String[] args) throws IOException, SAXException,
			TikaException {
		// 针对97-2003的microsoft office使用
		// Parser parser = new OfficeParser();
		// 针对microsoft office 2007及其以后的版本,使用
		// Parser parser = new OOXMLParser();
		// 或简单的使用AutoDetectParser
		parseFile(INPATH, OUTPATH);
	}
	public static boolean parseFile(String inFile, String outFile) {
		boolean result = false;
		InputStream in = null;
		OutputStream out = null;
		try {
			//创建输入、输出流
			in = new BufferedInputStream(new FileInputStream(new File(inFile)));
			out = new BufferedOutputStream(new FileOutputStream(
					new File(outFile)));
			// 设置metadata
			Metadata meta = new Metadata();
			meta.add(Metadata.CONTENT_ENCODING, "utf-8");
			meta.set(Metadata.RESOURCE_NAME_KEY, inFile);
			// 设置contentHandler (可以替换为WriteOutContentHandler)
			ContentHandler handler = new BodyContentHandler(out);
			// 创建parser
			Parser parser = new AutoDetectParser();
			// 解析文档
			parser.parse(in, handler, meta, new ParseContext());
			// 打印metadata信息
			for (String name : meta.names()) {
				System.out.println(name + ":" + meta.get(name));
			}
		} catch (Exception e) {
			result = false;
			System.out.println(e.getMessage());
		} finally {
			try {
				if (in != null)
					in.close();
				if(out != null)
					out.close();
			} catch (IOException e1) {
				System.out.println(e1.getMessage());
			}
		}
		return result;
	}
} 
http://blog.csdn.net/an74520/article/details/20380739
Apache Tika-内容解析提取工具集合(a content analysis toolkit),布布扣,bubuko.com
Apache Tika-内容解析提取工具集合(a content analysis toolkit)
标签:style blog http color java 使用 os io
原文地址:http://my.oschina.net/cloudcoder/blog/305253