格式文本解析:Apache Tika介绍及使用

1、Tika应用层架构

应用程序员可以很容易地在他们的应用程序集成Tika。Tika提供了一个命令行界面和图形用户界面,使它比较人性化。

在本章中,我们将讨论构成Tika架构的四个重要模块。下图显示了Tika的四个模块的体系结构:

  • 语言检测机制。
  • MIME检测机制。
  • Parser接口。
  • Tika Facade 类.

 

1.1 语言检测机制

每当一个文本文件被传递到Tika,它将检测在其中的语言。它接受没有语言的注释文件和通过检测该语言添加在该文件的元数据信息。

支持语言识别,Tika 有一类叫做语言标识符在包org.apache.tika.language及语言识别资料库里面包含了语言检测从给定文本的算法。Tika 内部使用N-gram算法语言检测。

1.2 MIME检测机制

Tika可以根据MIME标准检测文档类型。Tika默认MIME类型检测是使用org.apache.tika.mime.mimeTypes。它使用org.apache.tika.detect.Detector 接口大部分内容类型检测。

内部Tika使用多种技术,如文件匹配替换,内容类型提示,魔术字节,字符编码,以及其他一些技术。

1.3 解析器接口

org.apache.tika.parser 解析器接口是Tika解析文档的主要接口。该接口从提取文档中的文本和元数据,并总结了其对外部用户愿意写解析器插件。

采用不同的具体解析器类,具体为各个文档类型,Tika 支持大量的文件格式。这些格式的具体类不同的文件格式提供支持,无论是通过直接实现逻辑分析器或使用外部解析器库。

1.4 Tika Facade

使用的Tika facade类是从Java调用Tika的最简单和直接的方式,而且也沿用了外观的设计模式。可以在 Tika API的org.apache.tika包Tika 找到外观facade类。

通过实现基本用例,Tika作为facade的代理。它抽象了的Tika库的底层复杂性,例如MIME检测机制,解析器接口和语言检测机制,并提供给用户一个简单的接口来使用。

2、Tika的特点

  • 统一解析器接口:Tika封装在一个单一的解析器接口的第三方解析器库。由于这个特征,用户逸出从选择合适的解析器库的负担,并使用它,根据所遇到的文件类型。
  • 低内存占用:Tika因此消耗更少的内存资源也很容易嵌入Java应用程序。也可以用Tika平台像移动那样PDA资源少,运行该应用程序。
  • 快速处理:从应用连结内容检测和提取可以预期的。
  • 灵活元数据:Tika理解所有这些都用来描述文件的元数据模型。
  • 解析器集成:Tika可以使用可在单一应用程序中每个文件类型的各种解析器库。
  • MIME类型检测:Tika可以检测并从所有包括在MIME标准的媒体类型中提取内容。
  • 语言检测:Tika包括语言识别功能,因此可以在一个多语种网站基于语言类型的文档中使用。

3、Tika的功能

Tika支持多种功能:

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

3.1 文件类型检测

Tika使用不同的检测技术,检测给它的文件的类型。

 

3.2 内容提取

Tika有一个解析器库,可以分析各种文档格式的内容,并提取它们。然后检测所述文档的类型,它从解析器库选择的适当的分析器,并传递该文档。不同类别的Tika方法来解析不同的文件格式。

 

3.3 元数据提取

随着内容,Tika提取具有相同的程序的文件的元数据中的内容的提取。对于某些文件类型,Tika有接口类提取元数据。

 

3.4 语言检测

在内部,Tika如下像一个n-gram算法来检测所述内容的语言的给定文档中。Tika取决于类,如语言识别和Profiler的语言识别。

 

4、Tika环境配置

4.1 系统要求

JDK

Java SE 2 JDK 1.6 或以上

内存

1 GB RAM (推荐)

硬盘空间

无最小要求

操作系统版本

Windows XP 或以上, Linux

    1. Maven依赖

<dependency>

            <groupId>org.apache.tika</groupId>

            <artifactId>tika-parsers</artifactId>

            <version>1.17</version>

 </dependency>

    1. Tika图形操作界面

下载 tika-app-1.21.jar 

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/tika/tika-app-1.21.jar

运行 java -jar tika-app-1.21.jar ,如下图

 

在GUI上,点击open打开,浏览并选择一个文件,该文件将被提取,或将其拖动到窗口的空白。

Tika 提取的文件的内容,并在五个不同的格式显示出来,即。元数据,格式化文本,纯文本,主要内容和结构化文本。可以选择任何想要的格式。

5、Tika支持的文件格式

下面的表显示了Tika支持的文件格式。

 

文件格式

类库

Tika中的类

XML

org.apache.tika.parser.xml

XMLParser

HTML

org.apache.tika.parser.htmll and it uses Tagsoup Library

HtmlParser

MS-Office compound document Ole2 till 2007 ooxml 2007 onwards

org.apache.tika.parser.microsoft

org.apache.tika.parser.microsoft.ooxml and it uses Apache Poi library

OfficeParser(ole2)

OOXMLParser(ooxml)

OpenDocument Format openoffice

org.apache.tika.parser.odf

OpenOfficeParser

portable Document Format(PDF)

org.apache.tika.parser.pdf and this package uses Apache PdfBox library

PDFParser

Electronic Publication Format (digital books)

org.apache.tika.parser.epub

EpubParser

Rich Text format

org.apache.tika.parser.rtf

RTFParser

Compression and packaging formats

org.apache.tika.parser.pkg and this package uses Common compress library

PackageParser and CompressorParser and its sub-classes

Text format

org.apache.tika.parser.txt

TXTParser

Feed and syndication formats

org.apache.tika.parser.feed

FeedParser

Audio formats

org.apache.tika.parser.audio and org.apache.tika.parser.mp3

AudioParser MidiParser Mp3- for mp3parser

Imageparsers

org.apache.tika.parser.jpeg

JpegParser-for jpeg images

Videoformats

org.apache.tika.parser.mp4 and org.apache.tika.parser.video this parser internally uses Simple Algorithm to parse flash video formats

Mp4parser FlvParser

java class files and jar files

org.apache.tika.parser.asm

ClassParser CompressorParser

Mobxformat (email messages)

org.apache.tika.parser.mbox

MobXParser

Cad formats

org.apache.tika.parser.dwg

DWGParser

FontFormats

org.apache.tika.parser.font

TrueTypeParser

executable programs and libraries

org.apache.tika.parser.executable

ExecutableParser

6、java整合Tika实现文件解析

6.1 Tika文件类型检测

public static String getFileType(){
    try {
        File file = new File("D:\\111.zip");
        Tika tika = new Tika();
        String fileType = tika.detect(file);
        if (fileType != null && fileType.contains("/")) {
            fileType = fileType.substring(fileType.indexOf("/") +1);
        }
        return fileType;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

 

6.2 Tika内容提取

public static String getContext(){

    try {

        File file = new File("sample.txt");

        Tika tika = new Tika();

        String filecontent = tika.parseToString(file);

        System.out.println("Extracted Content: " + filecontent);

        return filecontent;

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

6.3 Tika元数据提取

public static String parsePdf(){

    try {

        BodyContentHandler handler = new BodyContentHandler();

        Metadata metadata = new Metadata();

        FileInputStream inputstream = new FileInputStream(new File("D:\\111.pdf"));

        ParseContext pcontext = new ParseContext();



        //parsing the document using PDF parser

        PDFParser pdfparser = new PDFParser();

        pdfparser.parse(inputstream, handler, metadata,pcontext);

        //getting the content of the document

        System.out.println("Contents of the PDF :" + handler.toString());

        // 元数据提取

        System.out.println("Metadata of the PDF:");

        String[] metadataNames = metadata.names();

        for(String name : metadataNames) {

            System.out.println(name+ " : " + metadata.get(name));

        }

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

6.4 Tika语言检测

public static String LanguageDetection() {

    try {

        Parser parser = new AutoDetectParser();

        BodyContentHandler handler = new BodyContentHandler();

        Metadata metadata = new Metadata();

        FileInputStream content = new FileInputStream(new File("D:\\111.zip"));

        //Parsing the given document

        parser.parse(content, handler, metadata, new ParseContext());

        LanguageIdentifier object = new LanguageIdentifier(handler.toString());

        System.out.println("Language name :" + object.getLanguage());

        return  object.getLanguage();

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

6.5 Tika提取pdf文件

public static String parsePdf(){

    try {

        BodyContentHandler handler = new BodyContentHandler();

        Metadata metadata = new Metadata();

        FileInputStream inputstream = new FileInputStream(new File("D:\\1111.pdf"));

        ParseContext pcontext = new ParseContext();



        //parsing the document using PDF parser

        PDFParser pdfparser = new PDFParser();

        pdfparser.parse(inputstream, handler, metadata,pcontext);

        //getting the content of the document

        System.out.println("Contents of the PDF :" + handler.toString());

        // 元数据提取

        System.out.println("Metadata of the PDF:");

        String[] metadataNames = metadata.names();

        for(String name : metadataNames) {

            System.out.println(name+ " : " + metadata.get(name));

        }

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

6.6 Tika提取文本文档

public static String parseTxt(){

    try {

        BodyContentHandler handler = new BodyContentHandler();

        Metadata metadata = new Metadata();

        FileInputStream inputstream = new FileInputStream(new File("D:\\example.txt"));

        ParseContext pcontext=new ParseContext();

        //Text document parser

        TXTParser  TexTParser = new TXTParser();

        TexTParser.parse(inputstream, handler, metadata,pcontext);

        System.out.println("Contents of the document:" + handler.toString());

        return handler.toString();

    } catch (Exception e) {

        e.printStackTrace();

    }

    return "";

}

 

6.8 Tika提取word内容

Tika-1.*最高支持2007及更低版本的Office Word文档,如果是高于2007版本的Word文档需要使用POI处理(Tika会报错)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值