tika的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tika的使用相关的知识,希望对你有一定的参考价值。

根据工作的需要,最近需要使用到tika,所以将工作中用的东西记录如下

Tika的主要功能

  • 文档类型检测
  • 内容提取
  • 元数据提取
  • 语言检测

Tika的处理过程

  Tika包含解析和处理两个过程,其中解析由Parser接口来完成,处理则由ContentHandler接口来完成。其中parser负责解析具体的文档,当解析到需要进行处理的时候,调用contentHandler进行解析内容的处理,这两者相互配合,最终将处理得到的结果返回。Parser是一个接口,当需要对不同的文档进行解析时候,需要调用不同的实现。如何知道需要调用具体哪个Parser呢?Tika通过MimeType来实现对一个文档的具体识别工作,根据MimeType识别出文档的类型,然后选择调用具体的Parser来解析文档。

    ContentHandler对不同的信息进行处理时,需要自己调用具体的信息处理类。一般来说,如果只关心文档内的内容(即有信息的地方),可以使用WriteOutContentHandler。这个handler将所以被解析到的信息通过一个output或write输出到调用者提供的输出流中,这样最终可以读取这个writer中的数据。

     除了文档内容信息外,还有一些关于文档的元信息需要在处理的过程中被解析和保存,比如一个文档的最后编辑时间,最后的保存时间,标题,作者以及contentType等。在tika中,这些信息被保存在一个叫Metadata的对象中。metadata保存了很多与具体文档相关的值,它以一个map的形式,保存相应的元数据信息值。如对于word,它会保存其中的Author,Keywords这些信息。这些信息对于用一些关键信息进行文档检索非常有用。

Tika中涉及到的类和接口主要如下

1. Tika

2. Parser

3. Meta

4. LanguageIdentifier

下面介绍这些类的关系和主要使用方法

 

 

 

 

            in = new BufferedInputStream(new FileInputStream(new File(inFile)));//待解析文档的输入流
            out = new BufferedOutputStream(new FileOutputStream(
                    new File(outFile)));                                       //解析出的文档内容输出流,可以指定文件
            Metadata meta = new Metadata();
            ContentHandler handler = new BodyContentHandler(out);               //处理器
            Parser parser = new AutoDetectParser();                              //解析器,如果知道该用哪个解析器,可以指定,否则就用自动匹配的解析器
            parser.parse(in, handler, meta, new ParseContext());
            for (String name : meta.names()) {                                   //查看解析出的文档的元信息
                System.out.println(name + ":" + meta.get(name));
            }

 

以上是关于tika的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将使用 Tika 从 PDF 中提取的文本放入 JSON?

使用 tika (application/x-tika-ooxml) 检索错误的 mime 类型

tika的使用

Apache Tika 提取扫描的 PDF 文件

Python Tika 无法从 url 解析 pdf

eclipse 无法导入 apache tika src