Apache Tika-内容解析提取工具集合(a content analysis toolkit)

简介

Apache Tika toolkit可以自动检测各种文档(如word,ppt,xml,csv,ppt等)的类型并抽取文档的元数据和文本内容。Tika集成了现有的文档解析库,并提供统一的接口,使针对不同类型的文档进行解析变得更简单。Tika针对搜索引擎索引、内容分析、转化等非常有用。

支持的文档格式

详见参见http://tika.apache.org/1.5/formats.html

  1. HyperText Markup Language
  2. XML and derived formats
  3. Microsoft Office document formats
  4. OpenDocument Format
  5. Portable Document Format
  6. Electronic Publication Format
  7. Rich Text Format
  8. Compression and packaging formats
  9. Text formats
  10. Feed and Syndication formats
  11. Audio formats
  12. Image formats
  13. Video formats
  14. Java class files and archives
  15. The mbox format
  16. CAD formats
  17. Font formats
  18. Executable programs and libraries

处理过程

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;
	}
}

参考

pache.org/1.5/formats.html

http://blog.csdn.net/an74520/article/details/20380739

Apache Tika-内容解析提取工具集合(a content analysis toolkit),布布扣,bubuko.com

时间: 2024-10-10 07:43:55

Apache Tika-内容解析提取工具集合(a content analysis toolkit)的相关文章

lucene索引查看工具luke和文本提取工具Tika

luke可以方便的查看lucene的索引信息,当然也可以查看solr和es中的索引信息(基于lucene实现). 查看索引前,要注意lucene版本的问题,高版本的lucene用低版本的luke工具就可能无法打开. 记得以前用luke还可以实现索引修复的功能,会把有错误的段segment删掉,使用前备份. 关于luke的使用后面补上. Tika是一个文本提取工具,可以从word,pdf,excel等文件中提取内容,为es等提供数据源.图片信息可以只分析标题大小,没必要记录RGB颜色信息. Tik

代码片段,使用TIKA来解析PDF,WORD和EMAIL

/** * com.jiaoyiping.pdstest.TestTika.java * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. * All rights reserved. */ package com.jiaoyiping.pdstest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.i

C#最佳工具集合:IDE、分析、自动化工具等

原文:C#最佳工具集合:IDE.分析.自动化工具等 C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言.如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理.但是,这个工具列表可能会改变您编写C#代码的方式. C#编程的最佳工具有以下几类: IDE VS扩展 编译器.编辑器和序列化 反编译和代码转换工具 构建自动化和合并工具 版本控制 测试工具和VS扩展 性能分析 APM 部署自动化 容器 使用上面的链接直接跳转到特定工具,或

1.6.3 Uploading Data with Solr Cell using Apache Tika

1. Uploading Data with Solr Cell using Apache Tika solr使用Apache Tika工程的代码提供了一个框架,用于合并所有不同格式的文件解析器为solr自己的解析器,如Apache PDFBox,Apache POI.通过这个框架,solr使用ExtractingRequestHandler来上传二进制文件. 如果想要solr使用你自己的ContentHandler,你需要继承ExtractingRequestHandler,重写createF

内容提供者ContentProvider和内容解析者ContentResolver

简介 ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查.关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据.那么,这里为何要使用ContentProvider 对

手机上也可以用的快手和火山小视频提取工具

之前分享过一个火山无水印视频提取软件,但是需要安装到电脑上,很多人觉得很麻烦. 今天分享个网页版,无需安装,并且电脑和手机都可以用的视频提取工具,支持提取快手和火山小视频里的任何视频,就连火山小视频里那种<作者不允许他人下载>的视频都可以解析,并且解析出来的视频都是没有水印的.(是不是觉得这工具特别赞,觉得赞的话,给我的文章点个赞吧??) 工具地址: 快手视频解析下载:http://kuaishou.iiilab.com/ 火山小视频解析下载:http://huoshan.iiilab.com

Android开发免费类库和工具集合

Android开发免费类库和工具集合 - OPEN 开发经验库 用于Android开发的免费类库和工具集合,按目录分类. Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library 广告 AdMob Google Mobile Ads SDK InMobi mMedia mobileCore MoPub Tapjoy Analytics Google An

PHP性能:序——谈ab(Apache Bench)压力测试工具

PHP性能:序--谈ab(Apache Bench)压力测试工具 ab(Apache  Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.ab建议在linux环境下使用. 为啥要压力测试工具? 因为你不给你的网站压力,你不知道项目的最大的容量是多少,自己的知识有多少.在一定范围里,压力达到一定程度,动力和容量也就达到顶峰.所以说没有最大的容量,只有极致的性能优化. 压力测试工具,另一方面也为测试提供一个标准,为当前需要优化提供基础数据.

apache kafka迁移与扩容工具用法

kafka迁移与扩容工具使用 参考官网site:https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-6.ReassignPartitionsTool 说明: 当我们对kafka集群扩容时,需要满足2点要求: 将指定topic迁移到集群内新增的node上. 将topic的指定partition迁移到新增的node上. 1. 迁移topic到新增的node上 假如现在一个kafka集