文章目录

  • 1、基本介绍
  • 2、Tika使用
    • 2.1、解析器接口(The Parser interface)
      • 2.1.1、自定义Parser类
    • 2.2、检测器接口
    • 2.3、Tika配置

1、基本介绍

Apache Tika(文本分析工具包)能够检测并提取来自上千种不同文件类型(如PPT、XLS和PDF)的元数据和文本;所有这些文件类型都可以通过一个接口进行解析,这使得Tika在搜索引擎索引、内容分析、翻译等方面非常有用。

2、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来解析文档(而不是简单地检测文档类型等等),需要引入该依赖。

2.1、解析器接口(The Parser interface)

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功能封装到一个可以处理任何类型文档的解析器中;默认使用的就是该解析器。

2.1.1、自定义Parser类

在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>
  • 定义一个解析器类,该类可以实现Parser接口,也可以去继承抽象类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配置举例

2.2、检测器接口

检测器接口是是实现文本检测的基础,该接口的方法如下:

/**
*@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,它在运行时自动检测(基于服务文件)可用的检测器,并依次尝试这些检测器来识别文件类型;默认使用该注册器。

2.3、Tika配置

在使用时,可以使用Tika的配置xml文件实现Tika的配置,从而控制哪些类型的文件,使用哪些类型的解析器等等,具体的可配置项可以参考:Tika配置 ,这里举一个配置文件的例子:

<?xml version="1.0" encoding="UTF-8"?>
<properties><parsers><!-- Default Parser for most things, except for 2 mime types, and neveruse 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使用举例

Apache Tika入门相关推荐

  1. Apache Solr入门教程

    转自:http://blog.csdn.net/u011936655/article/details/51960005 Apache Solr入门教程(初学者之旅) 写在前面:本文涉及solr入门的各 ...

  2. 1.6.3 Uploading Data with Solr Cell using Apache Tika

    1. Uploading Data with Solr Cell using Apache Tika solr使用Apache Tika工程的代码提供了一个框架,用于合并所有不同格式的文件解析器为so ...

  3. Apache Tika:通用的内容分析工具

    项目介绍 Tika是一个内容分析工具,自带全面的parser工具类,能解析基本所有常见格式的文件,得到文件的metadata,content等内容,返回格式化信息.总的来说可以作为一个通用的解析工具. ...

  4. Apache Camel入门

    在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放源代码项目,已有将近5年的 ...

  5. Apache Tika源码研究(七)

    tika怎样加载Parser实现类的,怎样根据文档的mime类型调用相应的Parser实现类,本文接着分析 先熟悉一下tika的解析类的相关接口和类的UML模型: Parser接口的源码如下: /** ...

  6. Apache Shiro入门

    Apache Shiro入门 @(Shiro)[shiro,安全框架] Apache Shiro入门 Apache Shiro基本概述 Apache Shiro基本概念 使用Shiro能做什么 Shi ...

  7. Apache CXF入门

    Apache CXF入门 @(WebService)[WebService, CXF,wsdl, soap,uddi] Apache CXF入门 Apache CXF基本概述 Apache CXF框架 ...

  8. Apache NIFI入门(读完即入门)

    Apache NIFI入门(读完即入门) 编辑人(全网同名):酷酷的诚 邮箱:zhangchengk@foxmail.com 我将在本文中介绍: 什么是ApacheNIFI,应在什么情况下使用它,理解 ...

  9. Apache Camel入门教程

    Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...

最新文章

  1. linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$
  2. excel字段自动java类,Java 接口自动化系列--工具类之Excel测试数据解析封装
  3. 一友人昨夜接到电话,发生何事
  4. python下载图片、已知url_python 爬虫之requests爬取页面图片的url,并将图片下载到本地...
  5. python学习-综合练习五(五人分鱼(优化解)、顺向、反向推导)
  6. 分享几道经典的javascript面试题
  7. JAVA入门级教学之(myeclipse的使用)
  8. 8 SD配置-企业结构-分配-给公司代码分配销售组织
  9. 获取指定路径下所有PDF文件的总页数
  10. 吴恩达机器学习(五)正则化(解决过拟合问题)
  11. 【OpenStack】OpenStack系列5之Cinder详解
  12. 如何打印身份证的正反面
  13. Python - 使用Pylint检查分析代码
  14. 服装系统mysql设计_服装行业ERP系统的设计与实现-店铺模块(SSH,MySQL)(含录像)
  15. 鼠标精灵对码软件_暗影精灵6游戏主机评测
  16. ipad pro pythonista_这 15 个应用 , 程序员用 iPad 照样可以编程 !
  17. 从我的角度体会平安车险的服务
  18. 《写作的诞生》读后感
  19. Docker Overlayfs文件系统联合挂载原理
  20. 异形结构的纳米材料:纳米团簇/纳米丝/纳米棒/纳米管的相关研究

热门文章

  1. 弘辽科技:淘宝店铺上下架规则有哪些?规则介绍
  2. go语言实现仿QQ聊天功能
  3. 在计算机网络系统中一般要求误码率低于,[单选] 在计算机网络通信系统中,一般要求误码率低于()。...
  4. RFP注册财务策划师一个月工资能有多少?
  5. 孤儿,僵尸,守护线程
  6. android开发入门与实战!你了解过移动端适配吗?赶紧收藏备战金三银四!
  7. 超纯水系统中硼离子去除技术原理
  8. SSD讲堂五(训练)_错误调试:failed to allocate 4.75G (5102921216 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
  9. Android Auto 概述
  10. IOS如何在相机取景框的正中央加视图