Tika基本使用

Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。

Tika提供了对如下文件格式的支持:

PDF - 通过Pdfbox

MS-* - 通过POI

HTML - 使用nekohtml将不规范的html整理成为xhtml

OpenOffice 格式 - Tika提供

Archive - zip, tar, gzip, bzip等

RTF - Tika提供

Java class - Class解析由ASM完成

Image - 只支持图像的元数据抽取

XML

Tika的API十分便捷,核心是Parser interface,其中定义了一个parse方法:

public void parse(InputStream stream, ContentHandler handler,Metadata metadata, ParseContext context)

用stream参数传递需要解析的文件流, 文本内容会被传入handler,而元数据会更新至metadata。

可以使用Tika的ParserUtils工具来根据文件的mime-type来得到一个适当的Parser来进行解析工作。或者Tika还提供了一个AutoDetectParser根据不同的二进制文件的特殊格式 (比如说Magic Code),来寻找适合的Parser。

1、Parser接口

void parse(InputStream stream, ContentHandler handler,Metadata metadata, ParseContext context)throws IOException, SAXException, TikaException;

InputStream:文档输入原始 字节流。它不会在此方法中关闭InputStream。

ParserContext: 解析处理的上下文。此参数用于用户需要定制解析过程时使用。如何控制?它内部一个Map,用Map保存接口(class)与其实例的所组 成的键值对。这些接口(class)只能是在Parser中用于解析文档的所需接口才会起作用。

ContentHandler:XHTML SAX事件处理器。将输入文档的结构化信息以XHTML格式写入到此Handler。

Metadata:文档元数据。既是输入参数,也是输出参数。作输入参数时,能够有助于解析器更好地理解文档的格式。

2、选择解析器Parser

(1)确定只用一种文档格式(以Html格式为例)

Parser parser = new HtmlParser();

parser.parse(stream, handler, metadata, context);

(2)确定使用多种文档格式中的某一格式

Map<MediaType, Parser> parsersByType = new HashMap<MediaType, Parser>();

parsersByType.put(MediaType.parse("text/html"), new HtmlParser());

parsersByType.put(MediaType.parse("application/xml"), new XMLParser());

CompositeParser parser = new CompositeParser();    //Parser的集合

parser.setParsers(parsersByType);

parser.setFallback(new TXTParser());

Metadata metadata = new Metadata();

metadata.set(Metadata.CONTENT_TYPE, "text/html");

parser.parse(stream, handler, metadata, context);

(3)不确定文档格式

Parser parser = new AutoDetectParser();

parser.parse(stream, handler, metadata, context);

3、tika的两种使用方式

1)方式一

public String fileToTxt(File f) {
		Parser parser = new AutoDetectParser();
		InputStream is = null;
		try {
			Metadata metadata = new Metadata();
			metadata.set(Metadata.AUTHOR, "波帅");  //没有作用,因为被覆盖掉了
			metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());

			is = new FileInputStream(f);
			ContentHandler handler = new BodyContentHandler();

			ParseContext context = new ParseContext();
			context.set(Parser.class, parser);

			parser.parse(is, handler, metadata, context);

			for(String name : metadata.names()) {
				System.out.println(name+":"+metadata.get(name));
			}
			return handler.toString();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (TikaException e) {
			e.printStackTrace();
		} finally {
			if(is != null) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}

2)方式二(效率没有方式一高)

public String tikaTool(File f) throws IOException, TikaException {
		Tika tika = new Tika();

		Metadata metadata = new Metadata();
		metadata.set(Metadata.AUTHOR, "波帅");  //没有作用,因为被覆盖掉了
		metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());

		String str = tika.parseToString(new FileInputStream(f), metadata);

		for(String name : metadata.names()) {
			System.out.println(name+":"+metadata.get(name));
		}
		//return tika.parseToString(f);
		return str;
	}

4、使用tika创建索引

Document doc = new Document();
		Metadata metadata = new Metadata();

		doc.add(new Field("content", new Tika().parse(
				new FileInputStream(file), metadata)));

参考资料:http://blog.csdn.net/gezhonglei2007/article/details/8078104

时间: 2024-08-01 00:13:38

Tika基本使用的相关文章

使用Tika、Luke工具解析多种类型(word、pdf、txt 等)索引文件

Tika 是2008年才产生的apache的一个项目,主要用于打开各种不同类型的文档,获取其文本信息.可以解析多种类型(word.pdf.txt .html等)文件! 甚至可以通过解析url,获取其网页信息.最后把其文本信息提起出来.这方面Tika有点像Jsoup..一般情况下,直接对word.pdf等文件直接创建索引是不对的,用luke工具查看之后,出现一大推乱七八糟的term.这个时候就可以用Tika 去在对其创建索引之前,转化处理其文本信息. package hhc; import jav

tika的使用

根据工作的需要,最近需要使用到tika,所以将工作中用的东西记录如下 Tika的主要功能 文档类型检测 内容提取 元数据提取 语言检测 Tika的处理过程 Tika包含解析和处理两个过程,其中解析由Parser接口来完成,处理则由ContentHandler接口来完成.其中parser负责解析具体的文档,当解析到需要进行处理的时候,调用contentHandler进行解析内容的处理,这两者相互配合,最终将处理得到的结果返回.Parser是一个接口,当需要对不同的文档进行解析时候,需要调用不同的实

代码片段,使用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

tika获取压缩文件内容

package com.wangchao.tika.sax; import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler {    @Override    public void characters(char[] ch, int start, int l

【NLP】Tika 文本预处理:抽取各种格式文件内容

Tika常见格式文件抽取内容并做预处理 作者 白宁超 2016年3月30日18:57:08 摘要:本文主要针对自然语言处理(NLP)过程中,重要基础部分抽取文本内容的预处理.首先我们要意识到预处理的重要性.在大数据的背景下,越来越多的非结构化半结构化文本.如何从海量文本中抽取我们需要的有价值的知识显得尤为重要.另外文本格式常常不一,诸如:pdf,word,excl,xml,ppt,txt等常见文件类型你或许经过一番周折还是有办法处理的.倘若遇到database,html,邮件,RTF,图像,语音

apache开源项目--TIKA

Tika是一个内容抽取的工具集合(a toolkit for text extracting).它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面.其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持. 在当前的0.2-SNAPSHOT版本中, Tika提供了对如下文件格式的支持: PDF - 通过Pdfbox MS-* - 通过POI HTML - 使用nekohtml将不规范的html整理成为xhtml OpenOffice 格式 - Tika提供 A

tika提取pdf信息异常

org.apache.tika.sax.WriteOutContentHandler$WriteLimitReachedException: Your document contained more than 100000 characters, and so your requested limit has been reached. To receive the full text of the document, increase your limit. (Text up to the l

【Tika基础教程之一】Tika基础教程

一.快速入门 1.Tika是一个用于文本解释的框架,其本身并不提供任何的库用于解释文本,而是调用各种各样的库,如POI,PDFBox等. 2.使用GUI界面解释文本 (1)进入Tika所有的目录,运行以下命令: java -jar "tika-app-1.5 (1).jar" -g (2)Tika的图形界面被打开,然后找开File-openURL: (3)点击确认后,即返回解释结果 默认情况下显示的是文本的元信息 (4)可以通过view菜单中的选项,分别查看 metadata, for

TIKA环境配置

本章将指导完成设置Apache Tika在Windows和Linux的配置过程.用户管理是必要的,同时安装了Apache Tika. 系统要求 JDK Java SE 2 JDK 1.6 或以上 内存 1 GB RAM (推荐) 硬盘空间 无最小要求 操作系统版本 Windows XP 或以上, Linux 第1步:验证安装Java 为了验证Java安装,打开控制台并执行下面的Java命令. OS 任务 命令 Windows 打开命令控制台 \>java –version Linux 打开命令终