一、什么是Tika?
-
Apache Tika用于文件类型检测和从各种格式的文件内容提取的库。
-
在内部,Tika使用现有的各种文件解析器和文档类型的检测技术来检测和提取数据。
-
使用Tika,人们可以开发出通用型检测器和内容提取到的不同类型的文件,如电子表格,文本文件,图像,PDF文件甚至多媒体输入格式,在一定程度上提取结构化文本以及元数据。
-
Tika提供用于解析不同文件格式的一个通用API。它采用83个现有的专业解析器库,为每个文档类型。
-
所有这些解析器库是根据一个叫做Parser接口单一接口封装。
二、架构
三、核心模块
- 语言检测机制
每当一个文本文件被传递到Tika,它将检测在其中的语言。它接受没有语言的注释文件和通过检测该语言添加在该文件的元数据信息。支持语言识别,Tika 有一类叫做语言标识符在包org.apache.tika.language及语言识别资料库里面包含了语言检测从给定文本的算法。Tika 内部使用N-gram算法语言检测。
- MIME检测机制
Tika可以根据MIME标准检测文档类型。Tika默认MIME类型检测是使用org.apache.tika.mime.mimeTypes。它使用org.apache.tika.detect.Detector 接口大部分内容类型检测。内部Tika使用多种技术,如文件匹配替换,内容类型提示,魔术字节,字符编码,以及其他一些技术。
- 解析器接口
org.apache.tika.parser 解析器接口是Tika解析文档的主要接口。该接口从提取文档中的文本和元数据,并总结了其对外部用户愿意写解析器插件。采用不同的具体解析器类,具体为各个文档类型,Tika 支持大量的文件格式。这些格式的具体类不同的文件格式提供支持,无论是通过直接实现逻辑分析器或使用外部解析器库。
- Tika Facade 类
使用的Tika facade类是从Java调用Tika的最简单和直接的方式,而且也沿用了外观的设计模式。可以在 Tika API的org.apache.tika包Tika 找到外观facade类。通过实现基本用例,Tika作为facade的代理。它抽象了的Tika库的底层复杂性,例如MIME检测机制,解析器接口和语言检测机制,并提供给用户一个简单的接口来使用。
四、案例
- 解析标准PDF【现场演示】
tika不能识别图片里面的内容,所以扫描版的pdf不能解析
- OCR识别(利用外部程序:Tesseract-OCR)【现场演示】
需要有训练集
五、结论
- 官方文档给出tika曾是lucene子项目,应用场景是提出元数据和内容作全文本检索。
- tika内容解析是靠XHTML SAX events传递的,可以直接转字符串或者xml结构(只做结构化用),之后可以用xpath expression提取数据,类似jsoup。但这做不到通用。
- 提取metadata是文件自身的信息,就和你右键文件属性看到信息一样,有就有,没有就没有,结构化的文本就是整个文件的内容