赞
踩
Apache Tika(文本分析工具包)能够检测并提取
来自上千种不同文件类型(如PPT、XLS和PDF)的元数据和文本;所有这些文件类型都可以通过一个接口进行解析,这使得Tika在搜索引擎索引、内容分析、翻译等方面非常有用。
介绍下Tika在Maven项目中的使用,首先介绍下Tika相关的两个Maven依赖:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.26</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.26</version>
</dependency>
tika-core
:包含Tika的关键接口和类,如果不需要来自Tika解析器组件的完整解析器集,可以单独使用。
tika-parsers
:如果您想使用Tika来解析文档(而不是简单地检测文档类型等等),需要引入该依赖。
Parser是tika的核心概念,它隐藏了不同文件格式和解析库的复杂性,为客户端程序提供了一个简单而强大的机制,用来从各种各样的文档中提取元数据和结构化文本内容,所有文档的解析使用一个接口来实现:
/**
*@param stream 所要解析文档的输入流
*@param handler 内容处理器,用来收集结果,Tika会将解析结果包装成XHTML SAX event进行分发,通过ContentHandler处理这些event就可以得到文本内容和其他有用的信息
*@param metadata 用于向解析器内外传递文档元数据。
*@param context 解析上下文有两个功能
* 1)向解析过程注入特定上下文,例如:在Microsoft Excel电子表格中处理特定地区的日期和数字格式
* 2)将委托解析器实例传递给两阶段解析器(如PackageParser子类)使用
**/
void parse(InputStream stream, ContentHandler handler, Metadata metadata,
ParseContext context) throws IOException, SAXException, TikaException;
在所有的解析器类中有一个典型类:
AutoDetectParser
,将所有Tika功能封装到一个可以处理任何类型文档的解析器中;默认使用的就是该解析器。
在Tika工具包中,有一个与MIME-Types有关的配置文件:custom-mimetypes.xml 但是如果要对一个全新的MIME-Type文件进行解析,则可以自定义解析器,步骤如下:
org/apache/tika/mime/custom-mimetypes.xml
,文件格式如下,以application/hello
为例来介绍: <?xml version="1.0" encoding="UTF-8"?>
<mime-info>
<mime-type type="application/hello">
<glob pattern="*.hi"/>
</mime-type>
</mime-info>
AbstractParser
,一般建议继承抽象类,实现如下:public class HelloParser extends AbstractParser { private static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(MediaType.application("hello")); public static final String HELLO_MIME_TYPE = "application/hello"; public Set<MediaType> getSupportedTypes(ParseContext context) { return SUPPORTED_TYPES; } public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException { metadata.set(Metadata.CONTENT_TYPE, HELLO_MIME_TYPE); metadata.set("Hello", "World"); XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata); xhtml.startDocument(); xhtml.endDocument(); } }
如果想要使用AutoDetectParser
类的功能时,可以将自定义的parser,添加到org.apache.tika.parser.Parser
文件中,在项目/src/main/resources
下添加META-INF/services/org.apache.tika.parser.Parser
文件,然后把自定义的parse包名配置上即可,可以参考:org.apache.tika.parser.Parser配置举例
检测器接口是是实现文本检测的基础,该接口的方法如下:
/**
*@param input 要检测文档的输入流
*@param metadata 文档元数据信息,该元数据信息通常需要包含两个关键值:
* 1)RESOURCE_NAME_KEY,它应该包含文件的名称(已知的),以及元数据;
* 2)CONTENT_TYPE,它应该包含该文件发布的内容类型(例如来自web服务器或内容存储库)。
**/
MediaType detect(java.io.InputStream input,Metadata metadata) throws java.io.IOException
Tika提供了一个特殊的检测器
org.apache.tika.detect.DefaultDetector
,它在运行时自动检测(基于服务文件)可用的检测器,并依次尝试这些检测器来识别文件类型;默认使用该注册器。
在使用时,可以使用Tika的配置xml文件实现Tika的配置,从而控制哪些类型的文件,使用哪些类型的解析器等等,具体的可配置项可以参考:Tika配置 ,这里举一个配置文件的例子:
<?xml version="1.0" encoding="UTF-8"?> <properties> <parsers> <!-- Default Parser for most things, except for 2 mime types, and never use the Executable Parser --> <parser class="org.apache.tika.parser.DefaultParser"> <mime-exclude>image/jpeg</mime-exclude> <mime-exclude>application/pdf</mime-exclude> <parser-exclude class="org.apache.tika.parser.executable.ExecutableParser"/> </parser> <!-- Use a different parser for PDF --> <parser class="org.apache.tika.parser.EmptyParser"> <mime>application/pdf</mime> </parser> </parsers> </properties>
接下来使用配置文件:
TikaConfig config = new TikaConfig("/path/to/tika-config.xml");
Detector detector = config.getDetector();
Parser autoDetectParser = new AutoDetectParser(config);
关于Tika更多的使用,可以参考官网使用举例:Tika使用举例
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。