TutorialsPoint Tika 教程

来源：易百教程

Tika教程

Apache Tika 是什么?

Apache Tika用于文件类型检测和从各种格式的文件内容提取的库。

在内部，Tika使用现有的各种文件解析器和文档类型的检测技术来检测和提取数据。

使用Tika，人们可以开发出通用型检测器和内容提取到的不同类型的文件，如电子表格，文本文件，图像，PDF文件甚至多媒体输入格式，在一定程度上提取结构化文本以及元数据。

Tika提供用于解析不同文件格式的一个通用API。它采用83个现有的专业解析器库，为每个文档类型。

所有这些解析器库是根据一个叫做Parser接口单一接口封装。

为什么用Tika?

据filext.com网站统计，大约有1.5万至51K的内容类型，并且这个数字还在与日俱增。数据被存储在不同的格式，如文本文档，excel表格，PDF，图像和多媒体文件，仅举几例。因此，应用程序如搜索引擎和内容管理系统需要从这些文档类型容易提取数据的额外的支持。Apache Tika 通过提供一个通用的API来检测并提取多种文件格式的数据服务达到这一目的。

Apache Tika 应用

有各种各样的应用程序使用Apache Tika。在这里，我们将讨论严重依赖Apache Tika几个突出的应用。

搜索引擎

开发搜索引擎索引的数字文档的文本内容使Tika被广泛使用。

搜索引擎是用于搜索的网页信息和索引文件的信息处理系统。

抓取工具是通过Web抓取获取使用一些索引技术被索引的文件搜索引擎的重要组成部分。此后，抓取工具传送这些索引文件提取成分。

提取成分的职责是提取文档中的文本和元数据。这样提取的内容和元数据是对搜索引擎非常有用。该提取组件包含在Tika中。

然后将提取的内容被传递到使用它来建立一个搜索索引搜索引擎的索引器。此外，该搜索引擎使用许多其它方式提取的内容也是如此。

文档分析

在人工智能领域，有一定的工具来自动分析文件在语义层面，并提取各种数据来自他们。

在这种应用中，这些文件是基于在文档的所提取的内容的突出方面进行分类。

这些工具使用提Tika内容提取分析从纯文本到不同的数字文档文件。

数字资产管理

有些组织管理他们的数字资产，如使用一种称为数字资产管理（DAM）的特殊应用程序的照片，电子书，绘图，音乐和视频。

这样的应用程序采取的文件类型检测器和元数据提取器的帮助下到的各种文件进行分类。

内容分析

像亚马逊网站建议根据自己的兴趣刚刚发布了他们的网站内容向个人用户。要做到这一点，这些网站遵循机器学习技术，或采取了类似Facebook的社交媒体网站的帮助下，以提取所需的信息，如喜欢和用户的利益。此收集到的信息将在HTML标签或其他格式需要另外的内容类型检测和提取的形式。

为一个文件，内容分析，我们有实现，如UIMA和Mahout的机器学习技术的技术。这些技术是在聚类和分析中的文件中的数据是有用的。

Apache Mahout是一个框架，它提供基于Apache Hadoop的ML算法- 一个云计算平台。 Mahout 提供了下面的某个集群和过滤技术的架构。按照这个架构，程序员可以编写自己的ML算法，通过采取各种文本和元数据的组合来产生建议。提供输入这些算法，最近Mahout的版本使用Tika提取二进制内容的文本和元数据。

Apache UIMA 分析和处理各种编程语言，并产生UIMA注解。在内部，它使用提卡注解者抽取文档中的文本和元数据。

历史

年份 | 开发
2006 | Tika的想法是在Lucene项目管理委员会之前设计的。
2006 | Tika及其在Jackrabbit项目有用的概念进行了讨论。
2007 | Tika进入Apache孵化器。
2008 | 版本0.1和0.2发布，Tika从孵化器到Lucene子项目独立。
2009 | 版本0.3，0.4，和0.5发布。
2010 | 版本0.6和0.7发布，Tika进入Apache的顶级项目。
2011 | Tika1.0发布，并Tika的书籍“Tika in Action”也在同一年被发布。

TIKA架构 - Tika教程

Tika应用层架构

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

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

语言检测机制。

MIME检测机制。

Parser接口。

Tika Facade 类.

语言检测机制

每当一个文本文件被传递到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检测机制，解析器接口和语言检测机制，并提供给用户一个简单的接口来使用。

Tika的特点

统一解析器接口：Tika封装在一个单一的解析器接口的第三方解析器库。由于这个特征，用户逸出从选择合适的解析器库的负担，并使用它，根据所遇到的文件类型。

低内存占用：Tika因此消耗更少的内存资源也很容易嵌入Java应用程序。也可以用Tika平台像移动那样PDA资源少，运行该应用程序。

快速处理：从应用连结内容检测和提取可以预期的。

灵活元数据：Tika理解所有这些都用来描述文件的元数据模型。

解析器集成：Tika可以使用可在单一应用程序中每个文件类型的各种解析器库。

MIME类型检测： Tika可以检测并从所有包括在MIME标准的媒体类型中提取内容。

语言检测： Tika包括语言识别功能，因此可以在一个多语种网站基于语言类型的文档中使用。

Tika的功能

Tika支持多种功能：

文档类型检测

内容提取

元数据提取

语言检测

文件类型检测

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

内容提取

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

元数据提取

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

语言检测

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

TIKA环境配置 - Tika教程

本章将指导完成设置Apache Tika在Windows和Linux的配置过程。用户管理是必要的，同时安装了Apache Tika。

系统要求

JDK | Java SE 2 JDK 1.6 或以上
内存 | 1 GB RAM (推荐)
硬盘空间 | 无最小要求
操作系统版本 | Windows XP 或以上, Linux

第1步：验证安装Java

为了验证Java安装，打开控制台并执行下面的Java命令。

OS | 任务 | 命令
Windows | 打开命令控制台 | \>java –version
Linux | 打开命令终端 | $java –version

如果Java已经正确地在您的系统已经安装，那么应该得到以下输出之一，具体取决于您所使用的平台上。

OS | 输出
Windows | Java version "1.7.0_60"Java (TM) SE Run Time Environment (build 1.7.0_60-b19)Java Hotspot (TM) 64-bit Server VM (build 24.60-b09, mixed mode)
Lunix | java version "1.7.0_25"Open JDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)Open JDK 64-Bit Server VM (build 23.7-b01, mixed mode)

假设本教程的读者都在继续本教程之前把Java1.7.0_60安装在他们的系统中。

如果没有安装Java SDK，从下载其最新版本 http://www.oracle.com/technetwork/java/javase/downloads/index.htmll and have it installed.

第2步：设置Java环境

设置JAVA_HOME环境变量指向到安装在机器上的Java基本目录的位置。例如，

OS | 输出
Windows | 设置环境变量 JAVA_HOME to C:\ProgramFiles\java\jdk1.7.0_60
Linux | export JAVA_HOME=/usr/local/java-current

附加Java编译器的位置到系统路径的完整路径。

OS | 输出
Windows | Append the String; C:\Program Files\Java\jdk1.7.0_60\bin to the end of the system variable PATH.
Linux | export PATH=$PATH:$JAVA_HOME/bin/

验证命令java版本，命令提示符如上所述。

第3步：设置Apache Tika环境

可以在自己的环境中通过使用集成Apache Tika ：

命令行，

Tika API,

Tika（CLI）的命令行界面，

Tika的图形用户界面（GUI），或

源代码

对于任何一种方法，首先，必须下载的Tika源代码。

Tika的源代码在 http://Tika.apache.org/download.htmll，在那里找到两个链接：

apache-tika-1.6-src.zip: 它包含的Tika的源代码以及 Tika -app-1.6.jar: 它是一个包含Tika应用程序的JAR文件。

下载这两个文件。Tika的官方网站的快照如下所示。

下载文件后，设置类路径的JAR文件 tika-app-1.6.jar。添加 jar 文件的完整路径，如图表所示。

OS | Output
Windows | 添加字符串 “C:\jars\Tika-app-1.6.jar” 到用户环境变量 CLASSPATH
Linux | Export CLASSPATH=$CLASSPATH:/usr/share/jars/Tika-app-1.6.tar:

Apache提供Tika应用程序，使用Eclipse的图形用户界面（GUI）应用程序。

使用Eclipse构建Tika-Maven

打开Eclipse，并创建一个新的项目。

如果在Eclipse中没有Maven，按照给定的步骤进行设置。

打开 link http://wiki.eclipse.org/M2E_updatesite_and_gittags. 在那里，会发现m2e插件版本以表格格式

挑选的最新版本，并保存在URL网址的p2列的路径。

现在重新访问eclipse，在菜单栏中，单击帮助，然后从下拉菜单中选择安装新软件

单击 Add 按钮，输入任何想要的名称，因为它是可选的。现在贴在位置字段中保存的 URL。

一个新的插件选择在上一步中添加的名字，选中复选框在它前面，然后单击下一步 Next。

继续安装。完成后，重新启动Eclipse。

现在，右键单击该项目，并在配置选项，选择Convert to Maven项目。

将出现创建一个新的POM新的向导。输入组ID为org.apache.tika，进入Tika的最新版本，选择jar 包，然后单击Finish。

Maven项目已成功安装，并且项目转化成Maven。现在，必须配置pom.xml文件。

配置XML文件

可以通过Tika Maven的依赖 http://mvnrepository.com/artifact/org.apache.tika

下面显示的是Apache Tika完整的Maven依赖。

<dependency>
   <groupId>org.apache.Tika</groupId>
   <artifactId>Tika-core</artifactId>
   <version>1.6</version>

   <groupId>org.apache.Tika</groupId>
   <artifactId> Tika-parsers</artifactId>
   <version> 1.6</version>

   <groupId> org.apache.Tika</groupId>
   <artifactId>Tika</artifactId>
   <version>1.6</version>

   <groupId>org.apache.Tika</groupId>
   < artifactId>Tika-serialization</artifactId>
   < version>1.6< /version>

   < groupId>org.apache.Tika< /groupId>
   < artifactId>Tika-app< /artifactId>
   < version>1.6< /version>

   <groupId>org.apache.Tika</groupId>
   <artifactId>Tika-bundle</artifactId>
   <version>1.6</version>
</dependency>

TIKA参考API - Tika教程

用户可以在使用 Tika 的外观类在应用程序中嵌入Tika。它的方法来探索Tika的所有功能。因为它是一个外网类，Tika抽象的背后有其功能的复杂性。除了这一点，用户还可以使用各种Tika类在他们的应用程序。

Tika 类 (facade)

这是最突出的Tika类库和正面设计模式。因此，抽象所有的内部实现，并提供了简单的方法来访问Tika功能。下表列出该类的构造函数以及它们的描述。

package : org.apache.tika

class: Tika

S.No. | 构造函数和说明
1 | Tika ()使用默认配置，构建Tika类。
2 | Tika (Detector detector)通过接受检测实例作为参数创建 Tika 的外观
3 | Tika (Detector detector, Parser parser)创建一个Tika外观通过接受检测和解析器实例作为参数。
4 | Tika (Detector detector, Parser parser, Translator translator)创建一个Tika外观通过接受检测器，解析器，并且转换实例作为参数。
5 | Tika (TikaConfig config)创建一个Tika外观通过接受TikaConfig类作为参数的对象。

方法和说明

以下是 Tika外观类的重要方法：

S.No. | 方法和描述
1 | String parseToString (File file)此方法及其所有变种分析作为参数传递的文件，并返回字符串格式提取的文本内容。默认情况下，这个字符串参数的长度是有限的。
2 | int getMaxStringLength ()返回由parseToString方法返回字符串的最大长度。
3 | void setMaxStringLength (int maxStringLength)设置由parseToString方法返回的字符串的最大长度。
4 | Reader parse (File file)该方法及其所有变型解析作为参数传递的文件，并返回 java.io.Reader对象的形式，所提取的文本内容。
5 | String detect (InputStream stream, Metadata metadata)该方法及其所有变接受InputStream对象和元数据对象作为参数，检测出给定文档的类型，并返回该文件类型的名称作为字符串对象。这种方法提炼使用 Tika 的检测手段。
6 | String translate (InputStream text, String targetLanguage)此方法及其所有变种接受InputStream对象，并表示，我们希望我们的文字被翻译语言的字符串，并把特定的文本所需的语言，尝试自动检测源语言。

解析器接口

这是Tika包的所有解析器类实现的接口。

package : org.apache.tika.parser

Interface : Parser

方法和说明

以下是TikaParser接口的重要方法：

S.No. | 方法及描述
1 | parse (InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)这个方法将给定的文档解析到XHTML和SAX事件序列。解析后，将放置在ContentHandler类的对象，并在元数据的类的对象的元数据，所提取的文件的内容。

Metadata 类

这个类实现了各种接口，如素材，地理，HttpHeaders，消息，微软Office，气候预测，TIFF，TikaMetadataKeys，TikaMimeKeys，Serializable接口，支持各种数据模型。下表列出了构造函数和这个类的方法及其说明。

package : org.apache.tika.metadata

class : Metadata

S.No. | 构造方法及描述
1 | Metadata()构造一个新的，空的元数据。

S.No. | 方法及描述
1 | add (Property property, String value)增加了一个元数据属性/值映射到给定的文件。使用此功能，可以将该值设置为一个属性。
2 | add (String name, String value)增加了一个元数据属性/值映射到给定的文件。使用这种方法，我们可以使用新名称的值设置为一个文件，从现有的元数据。
3 | String get (Property property)返回给定的元数据属性的值（如果有的话）。
4 | String get (String name)返回给定元数据的名称的值（如果有的话）。
5 | Date getDate (Property property)返回日期的元数据属性的值。
6 | String[] getValues (Property property)返回的元数据属性的所有的值。
7 | String[] getValues (String name)返回给定元数据的名称的所有的值。
8 | String[] names()返回元数据对象的元数据元素的所有的名字。
9 | set (Property property, Date date)设置给定的元数据属性的日期值
10 | set(Property property, String[] values)设置多个值到一个元数据属性。

语言类标识符

此分类标识了特定内容的语言。下表列出了这个类的构造函数以及它们的描述。

package : org.apache.tika.language

class : Language Identifier

S.No. | 构造器和说明
1 | LanguageIdentifier (LanguageProfile profile)实例化的语言标识符。在这里必须通过一个LanguageProfile对象作为参数。
2 | LanguageIdentifier (String content)这个构造函数可以通过从文本内容传递一个String实例化一个语言标识符

S.No. | 构造器和说明
1 | String getLanguage ()返回给当前LanguageIdentifier对象的语言。

TIKA文件格式 - Tika教程

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.microsoftorg.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

TIKA文件类型检测 - Tika教程

MIME 标准

多用途Internet邮件扩展(MIME)标准，用于识别文件类型的最佳标准。这些标准的知识有助于在内部相互作用的浏览器。

当浏览器遇到一个媒体文件，它选择可用它来显示其内容的兼容软件。在情况下，它不具有任何合适的应用程序，以运行一个特定媒体文件，它建议用户获得合适的插件软件。

Tika类型检测

Tika支持MIME所提供的所有互联网媒体文件类型。每当一个文件通过Tika检测到该文件，其文件类型。检测的介质类型，Tika内部通过以下机制。

文件扩展名

检查文件扩展名是检测的文件的格式的最简单和最广泛使用的方法。许多应用程序和操作系统提供这些扩展的支持。下面所示是一些已知文件类型的扩展名。

文件名 | 扩展名
image | .jpg
audio | .mp3
java archive file | .jar
java class file | .class

内容类型提示

每当从数据库中检索文件或将其附加到另一个文档，可能会失去该文件的名称或扩展名。在这种情况下，该文件所提供的元数据被用于检测文件的扩展名。

魔术字节

遵守文件的原始字节，可以为每个文件找到一些独特的字符模式。一些文件具有特殊的字节前缀称为被专门制成并包含在一个文件中，用于识别文件类型的目的魔术字节。

例如，可以找到CA FE BA在一个PDF文件（十六进制格式）的一个java文件和PDF％（ASCII格式）。 Tika使用此信息来识别的文件的媒体类型。

字符编码

文件纯文本使用不同类型的字符编码的编码。这里的主要挑战是确定在文件中使用的字符编码的类型。Tika 一样的标记和字节的频率来识别所使用的纯文本内容的编码系统字符编码技术。

XML根字符

为了检测XML文档，Tika解析XML文档并提取，如根元素，命名空间和引用的架构，从文件的真实介质类型，可以找到的信息。

使用Facade类类型检测

facade类的detect() 方法被用于检测文档类型。这个方法接受一个文件作为输入。下面显示的是文件类型检测与Tika外观类的示例程序。

import java.io.File;

import org.apache.tika.Tika;

public class Typedetection {

   public static void main(String[] args) throws Exception {

      //assume example.mp3 is in your current directory
      File file = new File("example.mp3");//

      //Instantiating tika facade class
      Tika tika = new Tika();

      //detecting the file type using detect method
      String filetype = tika.detect(file);
      System.out.println(filetype);
   }
}

将以上代码保存为TypeDetection.java并在命令提示符上使用以下命令运行它：

javac TypeDetection.java
java TypeDetection

audio/mpeg

TIKA内容提取 - Tika教程

Tika使用不同的解析器库来提取给解析器的内容。它选择了正确的语法分析器提取给定的文档类型。

解析文件，一般用于Tika外观facade类的parseToString()方法。下面显示的是所涉及分析过程的步骤和这些由Tika的ParsertoString()方法提取。

抽象的分析过程：

最初，当我们传一个文件到Tika，它使用与之适合的类型检测机制和检测文件类型。

一旦文档类型是已知的，它选择从解析器库中合适的解析器。解析器库中包含的类使用外部库。

然后将文档传送到选择将解析的内容，提取文本，并且还抛出了不可读格式异常解析器。

使用Tika内容提取

下面给出的是程序使用Tika facade 类从文件中提取文本：

import java.io.File;
import java.io.IOException;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;

import org.xml.sax.SAXException;

public class TikaExtraction {

   public static void main(final String[] args) throws IOException, TikaException {

      //Assume sample.txt is in your current directory
      File file = new File("sample.txt");

      //Instantiating Tika facade class
      Tika tika = new Tika();
      String filecontent = tika.parseToString(file);
      System.out.println("Extracted Content: " + filecontent);
   }
}

将以上代码保存为TikaExtraction.java并在命令提示符下运行：

javac TikaExtraction.java
java TikaExtraction

注意：假设 sample.txt 是具有下列内容。

Hi students welcome to yiibai

它提供了以下的输出：

Extracted Content: Hi students welcome to yiibai

使用Parser接口内容提取

Tika 解析器包提供了使用它可以分析一个文本文档的几个接口和类。下面给出的是org.apache.tika.parser包的框架图。

有几个可用的解析器类，如PDF格式分析器，Mp3Passer，OfficeParser等，逐一分析各自的文件。所有这些类都实现了解析器接口。

CompositeParser

给出的图表显示Tika通用解析器类CompositeParser 主AutoDetectParser。由于CompositeParser类遵循复合设计模式，可以用一组解析器实例作为一个单独的解析器。CompositeParser类也可以访问所有实现解析器接口的类。

AutoDetectParser

这是CompositeParser的子类，它提供了自动类型检测。使用此功能，AutoDetectParser自动发送收到的文件到使用该复合方法适当分析器类。

parse()方法

除了parseToString()，还可以使用分析器接口的parse()方法。该方法的原型如下所示。

parse([InputStream](http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.htmll?is-external=true) stream, [ContentHandler](http://docs.oracle.com/javase/6/docs/api/org/xml/sax/ContentHandler.htmll?is-external=true) handler, [Metadata](https://tika.apache.org/1.6/api/org/apache/tika/metadata/Metadata.htmll) metadata,
[ParseContext](https://tika.apache.org/1.6/api/org/apache/tika/parser/ParseContext.htmll) context)

下表列出了它接受作为参数的四个对象。

S.No. | 对象及描述
1 | InputStream stream包含任何文件的InputStream对象的内容
2 | ContentHandler handlerTika通过文档作为XHTML内容到此处理，此后该文件正在使用SAX API处理。它提供了在一个文件有效的后处理的内容。
3 | Metadata metadata元数据对象是用来既作为源和文件的元数据的目标。
4 | ParseContext context此对象使用在如遇有客户端应用程序想要定制解析过程。

例如：

下面给出一个例子，说明如何使用 parse()方法。

步骤 1：

要使用解析器接口的parse()方法，实例化任何为其提供实现这个接口的类。

也有个别解析器类，如PDFParser，OfficeParser，XMLParser等等。可以使用这些个人文件解析器。或者也可以使用CompositeParser或AutoDetectParser在内部使用的所有解析器类，并提取使用合适的解析器文档的内容。

Parser parser = new AutoDetectParser();
   (or)
Parser parser = new CompositeParser();
   (or)
object of any individual parsers given in Tika Library

步骤 2：

创建一个处理类的对象。下面给出的是三个内容处理程序：

S.No. | 类及描述
1 | BodyContentHandler这个类采用XHTML输出的主体部分，并写入该内容到输出写入或输出流。然后重定向XHTML内容到另一个内容处理程序实例。
2 | LinkContentHandler这个类检测，并挑选XHTML文档的所有H-参考标签和转发那些使用类似网络爬虫工具。
3 | TeeContentHandler这个类可以帮助在同时使用多个工具。

由于我们的目标是要提取的文件的文本内容，实例化BodyContentHandler如下图所示：

BodyContentHandler handler = new BodyContentHandler( );

步骤 3：

创建的元数据对象，如下所示：

Metadata metadata = new Metadata();

步骤 4：

创建任何输入流对象，并通过您的文件应该被提取到它。

FileInputstream

通过将文件路径作为参数实例化一个文件对象，这个对象传递给的FileInputStream类的构造函数。

注意：传递给文件对象的路径不应包含空格。

使用这些输入流类的问题是，它们不支持随机访问读取，来高效地处理某些文件格式是必需。要解决此问题，Tika提供TikaInputStream。

File file=new File(filepath)
FileInputStream inputstream=new FileInputStream(file);
   (or)
InputStream stream = TikaInputStream.get(new File(filename));

步骤 5：

创建一个解析的上下文对象，如下所示：

ParseContext context =new ParseContext();

步骤 6：

实例化解析器对象，调用parse方法，并通过所有需要的对象，如下面的原型：

parser.parse(inputstream, handler, metadata, context);

下面给出的是程序使用的解析器接口内容提取：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class ParserExtraction {

public static void main(final String[] args) throws IOException,SAXException, TikaException {

   //Assume sample.txt is in your current directory
   File file = new File("sample.txt");

   //parse method parameters
   Parser parser = new AutoDetectParser();
   BodyContentHandler handler = new BodyContentHandler();
   Metadata metadata = new Metadata();
   FileInputStream inputstream = new FileInputStream(file);
   ParseContext context = new ParseContext();

   //parsing the file
   parser.parse(inputstream, handler, metadata, context);
   System.out.println("File content : " + Handler.toString());
   }
}

将以上代码保存为 ParserExtraction.java 并在命令提示符下运行：

javac  ParserExtraction.java
java  ParserExtraction

假设 sample.txt 包含以下内容。

Hi students welcome to yiibai

它提供了以下的输出：

File content : Hi students welcome to yiibai

TIKA元数据提取 - Tika教程

除了内容，Tika还可以从一个文件中提取元数据。元数据是什么，但用文件所提供的附加信息。如果我们考虑一个音频文件，艺术家名，专辑名，标题下自带的元数据。

XMP标准

可扩展元数据平台(XMP)是用于处理和涉及到的文件的内容存储信息的标准。它是由Adobe系统公司的XMP创建提供了用于定义，创建和元数据的处理标准。可以嵌入该标准为多种文件格式，如PDF，JPEG，JPEG，GIF，JPG，HTML等。

Property 类

Tika使用属性类遵循XMP属性定义。它提供了PropertyType和值类型枚举捕获的元数据的名称和值。

Metadata 类

这个类实现了各种接口，如ClimateForcast, CativeCommons,Geographic, TIFF 等提供各种元数据模型的支持。此外，此类提供各种方法来提取一个文件的内容。

Metadata 名称

我们可以从它的元数据对象用的方法()提取一个文件的所有元数据的名称的列表。它返回所有的名字作为一个字符串数组。使用元数据的名称，就可以得到使用get()方法的值。它需要一个元数据的名称，并返回与它相关联的值。

String[] metadaNames = metadata.names();

String value = metadata.get(name);

使用解析法提取元数据

当我们分析一个使用文件parse()，传递一个空的元数据对象作为一个参数。这种方法提取指定的文件的元数据(如果该文件中包含有)，并将它们放置在元数据对象。因此，在使用parse()解析文件后，就可以提取该对象的元数据。

Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();   //empty metadata object
FileInputStream inputstream = new FileInputStream(file);
ParseContext context = new ParseContext();
parser.parse(inputstream, handler, metadata, context);
// now this metadata object contains the extracted metadata of the given file.
metadata.metadata.names();

下面给出的是一个完整的程序，从文本文件中提取元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class GetMetadata {

   public static void main(final String[] args) throws IOException, TikaException {

      //Assume that boy.jpg is in your current directory
      File file=new File("boy.jpg");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(file);
      ParseContext context = new ParseContext();

      parser.parse(inputstream, handler, metadata, context);
      System.out.println(handler.toString());

      //getting the list of all meta data elements
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

将以上代码保存为GetMetadata.java并在命令提示符处使用以下命令运行它：

javac  GetMetadata .java
java  GetMetadata

注意：假设下面的图片是boy.jpg

它提供了以下的输出：

Resolution Units: inch
Compression Type: Baseline
Data Precision: 8 bits
Number of Components: 3
tiff:ImageLength: 1000
Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
Component 1: Y component: Quantization table 0, Sampling factors 1 horiz/1 vert
Image Height: 1000 pixels
X Resolution: 300 dots
Original Transmission Reference: 53616c7465645f5fd22a84941585d89cc735d889c9d5ac58a01faf2c92ee3c6f9bcb38359bbe1eef
Image Width: 714 pixels
IPTC-NAA record: 92 bytes binary data
Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert
tiff:BitsPerSample: 8
Application Record Version: 4
tiff:ImageWidth: 714
Content-Type: image/jpeg
Y Resolution: 300 dots

还可以得到想要的元数据值。

添加新的元数据值

可以添加使用元数据类的add()方法新的元数据值。下面给出的是该方法的语法。在这里要添加的作者名字。

metadata.add(“author”,”Tutorials yiibai”);

元数据Metadata类预定义的属性包括类，如ClimateForcast，CativeCommons，Geographic继承等，以支持各种数据模型的属性。下面示出的是从由提卡实施遵循XMP元数据标准的TIFF图像格式的TIFF接口继承了软件数据类型的使用。

metadata.add(Metadata.SOFTWARE,"ms paint");

下面给出的是演示如何将元数据值添加到一个给定文件的完整程序。这里的元数据元素的列表被显示在输出，这样就可以增加新的值之后，观察在列表中的变化。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class AddMetadata {

   public static void main(final String[] args) throws IOException, SAXException, TikaException {

      //create a file object and assume sample.txt is in your current directory
      File file = new File("Example.txt");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(file);
      ParseContext context = new ParseContext();

      //parsing the document
      parser.parse(inputstream, handler, metadata, context);

      //list of meta data elements before adding new elements
      System.out.println( " metadata elements :"  +Arrays.toString(metadata.names()));

      //adding new meta data name value pair
      metadata.add("Author","Tutorials Point");
      System.out.println(" metadata name value pair is successfully added");

      //printing all the meta data elements after adding new elements
      System.out.println("Here is the list of all the metadata elements  after adding new elements ");
      System.out.println( Arrays.toString(metadata.names()));
   }
}

将以上代码保存为AddMetadata.java类，然后从命令提示符下运行它：

javac  AddMetadata .java
java  AddMetadata

假设 example.txt 有下列内容：

Hi students welcome to yiibai

它提供了以下的输出：

metadata elements of the given file :[Content-Encoding, Content-Type]

metadata name value pair is successfully added
Here is the list of all the metadata elements  after adding new elements
[Content-Encoding, Author, Content-Type]

设定值，用现有的元数据元素

可以设置值，使用set()方法在现有的元数据元素。使用set()方法设置的时间属性的语法如下：

metadata.set(Metadata.DATE, new Date());

还可以设置多个值，以使用set()方法的属性。使用set()方法多个值设定为作者属性的语法如下：

metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");

下面给出的是一个完整的程序演示set()方法。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import java.util.Date;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class SetMetadata {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //Create a file object and assume example.txt is in your current directory
      File file = new File("example.txt");

      //parameters of parse() method
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(file);
      ParseContext context = new ParseContext();

      //Parsing the given file
      parser.parse(inputstream, handler, metadata, context);

      //list of meta data elements elements
      System.out.println( " metadata elements and values of the given file :");
      String[] metadataNamesb4 = metadata.names();

      for(String name : metadataNamesb4) {
          System.out.println(name + ": " + metadata.get(name));
      }

      //setting date meta data
      metadata.set(Metadata.DATE, new Date());

      //setting multiple values to author property
      metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");

      //printing all the meta data elements with new elements
      System.out.println("List of all the metadata elements  after adding new elements ");
      String[] metadataNamesafter = metadata.names();

      for(String name : metadataNamesafter) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

将以上代码保存为SetMetadata.java并在命令提示符下运行：

javac  SetMetadata.java
java  SetMetadata

注意：假设sample.txt 有下列内容：

Hi students welcome to yiibai

在输出中，可以看到新添加的元数据元素。

metadata elements and values of the given file :
Content-Encoding: ISO-8859-1
Content-Type: text/plain; charset=ISO-8859-1
Here is the list of all the metadata elements  after adding new elements
date: 2014-09-24T07:01:32Z
Content-Encoding: ISO-8859-1
Author: ram, raheem, robin
Content-Type: text/plain; charset=ISO-8859-1

TIKA语言检测 - Tika教程

必要的语言检测

对于基于它们写在一个多语种网站的语言文件分类，语言检测工具是必要的。这个工具应该接受无语言注释(元数据)的文件，并通过检测语言中添加这些信息在文档的元数据。

算法性能分析语料库

什么是语料库？

为了检测一个文档的语言，语言信息被构造和用已知的语言的信息进行比较。设置这些已知的语言文字被称为语料库。

语料库是一种书面语言，解释了语言用于实际生活中的文本的集合。

语料库是从书本，成绩单，而像其他的互联网数据资源开发。语料库的精度取决于我们使用帧性能分析算法。

什么是性能分析算法？

检测语言的常用方法是使用字典。在给定的一段文本中使用的词语将与词典进行匹配。

在语言中常用的单词的列表将是最简单有效的语料库用于检测特定的语言，例如， a, an,在英文中。

使用Word设置为语料库

使用字集，一个简单的算法是框架找到两个语料库，其将等于的匹配单词的频率之间的差异的总和之间的距离。

此类算法有以下问题：

因为匹配单词的频率非常少，则该算法不能有效地与几个句子小文本工作。它需要大量的文字进行准确匹配。

它不能检测到字边界具有语言复合句，而那些具有类似空格或标点符号无字分隔。

由于在使用字集作为语料库这些困难，单个字符或字符组会被考虑。

使用字符集为主体

因为这是在一种语言中常用的字符是有限的数目，很容易应用基于单词的频率，而不是字符的算法。这种算法的工作更为出色的情况下在一个或极少数语言中使用的特定的字符集。

此算法存在下列缺点：

它是难以区分具有相似性质的频率两种语言。

没有任何特定的工具或算法来具体确定的帮助下（如文集）所使用的多语言字符集的语言。

N-gram算法

上述的缺点就产生了利用给定长度的字符序列为分析语料的一种新方法。个字符的这样的序列被称为N-gram，在一般情况下，N表示该字符序列的长度。

N元算法是一种有效的方法来检测语言，特别是在案件欧洲语言如英语的。

该算法与短文正常工作。

虽然有高级语言纹算法来检测多个语言中具有更吸引人的特征的多语言文档，Tika使用3-grams算法，因为它适合于大多数实际情况。

Tika语言检测

在所有由ISO639-1标准的184标准语言，Tika可检测18种语言。语言检测Tika是通过使用LanguageIdentifier类的getLanguage()方法。此方法返回字符串格式的语言代号。下面给出由Tika检测出的18语言代码对的列表中：

da—Danish | de—German | et—Estonian | el—Greek
en—English | es—Spanish | fi—Finnish | fr—French
hu—Hungarian | is—Icelandic | it—Italian | nl—Dutch
no—Norwegian | pl—Polish | pt—Portuguese | ru—Russian
sv—Swedish | th—Thai

实例化LanguageIdentifier类，则应该将内容传递的字符串格式将被提取，或LanguageProfile类对象。

LanguageIdentifier object=new LanguageIdentifier(“this is english”);

下面给出的是Tika语言检测的示例程序。

import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.language.LanguageIdentifier;

import org.xml.sax.SAXException;

public class LanguageDetection {

   public static void main(String args[])throws IOException, SAXException, TikaException {

      LanguageIdentifier identifier = new LanguageIdentifier("this is english ");
      String language = identifier.getLanguage();
      System.out.println("Language of the given content is : " + language);
   }
}

将以上代码保存为LanguageDetection.java并在命令提示符处使用以下命令运行它：

javac  LanguageDetection.java
java  LanguageDetection

它提供了以下的输出：

Language of the given content is : en

语言检测文档

要检测一个给定的文档的语言，必须使用parse()方法来解析它。parse()方法解析处理程序对象，这是传递给它的参数的内容，并将其存储。通过LanguageIdentifier类对象处理,构造函数的字符串的格式如下图所示：

parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());

下面给出的是一个演示如何检测一个给定的文档的语言完整的程序：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.language.*;

import org.xml.sax.SAXException;

public class DocumentLanguageDetection {

   public static void main(final String[] args) throws IOException, SAXException, TikaException {

      //Instantiating a file object
      File file = new File("Example.txt");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream content = new FileInputStream(file);

      //Parsing the given document
      parser.parse(content, handler, metadata, new ParseContext());

      LanguageIdentifier object = new LanguageIdentifier(handler.toString());
      System.out.println("Language name :" + object.getLanguage());
   }
}

将以上代码保存为SetMetadata.java并在命令提示符下运行：

javac  SetMetadata.java
java  SetMetadata

注意：假设sample.txt 有下列内容：

Hi students welcome to yiibai

它提供了以下的输出：

Language name :en

随着Tika jar，Tika提供了一个图形用户界面应用程序（GUI）和命令行界面（CLI）的应用程序。可以像其他Java应用程序在命令提示符下运行 Tika 的应用程序。

TIKA图形界面/GUI - Tika教程

图形用户界面(GUI)

Tika 提供了一个jar文件连同下面的链接它的源代码: http://tika.apache.org/download.htmll.

下载文件，并设置JAR类文件路径。

提取源代码zip文件夹，打开tika-app文件夹。

在解压缩文件夹“tika-1.6\tika-app\src\main\java\org\apache\Tika\gui” 后，会看到两个类文件：ParsingTransferHandler.java 和TikaGUI.java。

编译这两个类文件并执行TikaGUI.java类文件，它会打开下面的窗口。

现在让我们看看如何利用Tika的GUI。

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

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

以同样的方式，会发现在“tika-1.6\tika-app\src\main\java\org\apache\tika\cliI”文件夹中的CLI类。

下图显示了Tika能做到。当我们把图像托放在图形用户界面上，Tika提取并显示其元数据。

TIKA提取PDF - Tika教程

下面给出的程序是用来提取PDF文件内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.pdf.PDFParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class PdfParse {

   public static void main(final String[] args) throws IOException,TikaException {

      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("Example.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());

      //getting metadata of the document
      System.out.println("Metadata of the PDF:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name+ " : " + metadata.get(name));
      }
   }
}

保存上述代码保存为PdfParse.java，并通过使用下面的命令从命令提示编译：

javac PdfParse.java
java PdfParse

下面给出的是Example.pdf文件的快照：

PDF文档具有以下属性：

执行上述程序后，会得到如下的输出

输出:

Contents of the PDF:

Apache Tika is a framework for content type detection and content extraction
which was designed by Apache software foundation. It detects and extracts metadata
and structured text content from different types of documents such as spreadsheets,
text documents, images or PDFs including audio or video input formats to certain extent.

Metadata of the PDF:

dcterms:modified :     2014-09-28T12:31:16Z
meta:creation-date :     2014-09-28T12:31:16Z
meta:save-date :     2014-09-28T12:31:16Z
dc:creator :     Krishna Kasyap
pdf:PDFVersion :     1.5
Last-Modified :     2014-09-28T12:31:16Z
Author :     Krishna Kasyap
dcterms:created :     2014-09-28T12:31:16Z
date :     2014-09-28T12:31:16Z
modified :     2014-09-28T12:31:16Z
creator :     Krishna Kasyap
xmpTPg:NPages :     1
Creation-Date :     2014-09-28T12:31:16Z
pdf:encrypted :     false
meta:author :     Krishna Kasyap
created :     Sun Sep 28 05:31:16 PDT 2014
dc:format :     application/pdf; version=1.5
producer :     Microsoft® Word 2013
Content-Type :     application/pdf
xmp:CreatorTool :     Microsoft® Word 2013
Last-Save-Date :     2014-09-28T12:31:16Z

TIKA提取ODF - Tika教程

下面给出的是程序从打开Office文档格式(ODF)中提取内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.odf.OpenDocumentParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class OpenDocumentParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException{

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("example_open_document_presentation.odp"));
      ParseContext pcontext = new ParseContext();

      //Open Document Parser
      OpenDocumentParser openofficeparser = new OpenDocumentParser ();
      openofficeparser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + " :  " + metadata.get(name));
      }
   }
}

将以上代码保存为OpenDocumentParse.java，并通过使用以下命令，在命令提示符下编译：

javac OpenDocumentParse.java
java OpenDocumentParse

下面给出的是example_open_document_presentation.odp的快照：

本文档具有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
Apache Tika
Apache Tika is a framework for content type detection and content extraction which was designed
by Apache software foundation. It detects and extracts metadata and structured text content from
different types of documents such as spreadsheets, text documents, images or PDFs including audio
or video input formats to certain extent.

Metadata of the document:
editing-cycles:   4
meta:creation-date:   2009-04-16T11:32:32.86
dcterms:modified:   2014-09-28T07:46:13.03
meta:save-date:   2014-09-28T07:46:13.03
Last-Modified:   2014-09-28T07:46:13.03
dcterms:created:   2009-04-16T11:32:32.86
date:   2014-09-28T07:46:13.03
modified:   2014-09-28T07:46:13.03
nbObject:   36
Edit-Time:   PT32M6S
Creation-Date:   2009-04-16T11:32:32.86
Object-Count:   36
meta:object-count:   36
generator:   OpenOffice/4.1.0$Win32 OpenOffice.org_project/410m18$Build-9764
Content-Type:   application/vnd.oasis.opendocument.presentation
Last-Save-Date:   2014-09-28T07:46:13.03

TIKA提取MS Office文件 - Tika教程

下面给出的程序是用于从Microsoft Office文档中提取内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class MSExcelParse {

   public static void main(final String[] args) throws IOException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("example_msExcel.xlsx"));
      ParseContext pcontext = new ParseContext();

      //OOXml parser
      OOXMLParser  msofficeparser = new OOXMLParser ();
      msofficeparser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

保存上述代码保存为MSExelParse.java，并通过使用下面的命令从命令提示编译：

javac MSExcelParse.java
java MSExcelParse

下面给出的是 example_msExcel.xlsx 文件的快照

给定的 Excel 文件具有如下性质：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
Sheet1
Name    Age    Designation        Salary
Ramu    50    Manager            50,000
Raheem    40    Assistant manager    40,000
Robert    30    Superviser        30,000
sita    25    Clerk            25,000
sameer    25    Section in-charge    20,000

Metadata of the document:
meta:creation-date:    2006-09-16T00:00:00Z
dcterms:modified:    2014-09-28T15:18:41Z
meta:save-date:    2014-09-28T15:18:41Z
Application-Name:    Microsoft Excel
extended-properties:Company:
dcterms:created:    2006-09-16T00:00:00Z
Last-Modified:    2014-09-28T15:18:41Z
Application-Version:    15.0300
date:    2014-09-28T15:18:41Z
publisher:
modified:    2014-09-28T15:18:41Z
Creation-Date:    2006-09-16T00:00:00Z
extended-properties:AppVersion:    15.0300
protected:    false
dc:publisher:
extended-properties:Application:    Microsoft Excel
Content-Type:    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Last-Save-Date:    2014-09-28T15:18:41Z

TIKA提取文本文档 - Tika教程

下面给出的程序是用来提取文本文档的内容和元数据：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.parser.txt.TXTParser;

import org.xml.sax.SAXException;

public class TextParser {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("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());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + " : " + metadata.get(name));
      }
   }
}

保存上述代码作为TextParser.java，并通过使用下面的命令从命令提示编译：

javac TextParser.java
java TextParser

下面给出的是example.txt文件的快照：

文本文件具有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:

At Yiibai.com, we strive hard to provide quality tutorials for self-learning purpose in the domains of Academics, Information Technology, Management and Computer Programming Languages.

The endeavour started by Hema su, who is the founder and the managing director of Yiibai Pvt. Ltd. He came up with the website yiibai.com in year 2014 with the help of handpicked freelancers, with an array of tutorials for computer programming languages.

Metadata of the document: Content-Encoding: windows-1252 Content-Type: text/plain; charset=windows-1252

TIKA提取HTML文档 - Tika教程

下面给出的是该程序用于从HTML文档提取内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.html.HtmlParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class HtmlParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("example.htmll"));
      ParseContext pcontext = new ParseContext();

      //Html parser
      HtmlParser htmlparser = new HtmlParser();
      htmlparser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ":   " + metadata.get(name));
      }
   }
}

保存上述代码保存为HtmlParse.java，并通过使用下面的命令从命令提示编译：

javac HtmlParse.java
java HtmlParse

下面给出的是 example.htmll 文档的快照。

HTML文档有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
    Name                         Salary        age
    Ramesh Raman                 50000        20
    Shabbir Hussein                 70000          25
    Umesh Raman                 50000        30
    Somesh                         50000        35
Metadata of the document:
title:   HTML Table Header
Content-Encoding:   windows-1252
Content-Type:   text/html; charset=windows-1252
dc:title:   HTML Table Header

TIKA提取XML文档 - Tika教程

下面给出的程序是用来从XML文档提取内容和元数据：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.xml.XMLParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class XmlParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("pom.xml"));
      ParseContext pcontext = new ParseContext();

      //Xml parser
      XMLParser xmlparser = new XMLParser();
      xmlparser.parse(inputstream, handler, metadata, pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

保存上述代码保存为XmlParse.java，并通过使用下面的命令从命令提示编译：

javac XmlParse.java
java XmlParse

下面给出的是pom.xml文件的快照

本文档具有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
4.0.0
org.apache.tika
tika
1.6
org.apache.tika
tika-core
1.6
org.apache.tika
tika-parsers
1.6
src
maven-compiler-plugin
3.1
1.7
1.7

Metadata of the document:
Content-Type:   application/xml

TIKA提取.class文件 - Tika教程

下面给出的是该程序提取.class文件的内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.asm.ClassParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class JavaClassParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("Example.class"));
      ParseContext pcontext = new ParseContext();

      //Html parser
      ClassParser  ClassParser = new  ClassParser();
      ClassParser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + " :  " + metadata.get(name));
      }
   }
}

保存上述代码作为JavaClassParse.java，并通过使用下面的命令从命令提示编译：

javac JavaClassParse.java
java JavaClassParse

下面给出的是Example.java编译执行后，将得到example.class文件的快照：

此.class文件有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
package yiibai.tika.examples;
public synchronized class Example {
   public void Example();
   public static void main(String[]);
}

Metadata of the document:
title: Example
resourceName: Example.class
dc:title: Example

TIKA提取JAR文件 - Tika教程

下面给出的程序是用来从一个Java存档(JAR)文件提取内容和元数据：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.parser.pkg.PackageParser;

import org.xml.sax.SAXException;

public class PackageParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("Example.jar"));
      ParseContext pcontext = new ParseContext();

      //Package parser
      PackageParser packageparser = new PackageParser();
      packageparser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document: " + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ":   " + metadata.get(name));
      }
   }
}

保存上述代码为PackageParse.java，并通过使用下面的命令从命令提示编译：

javac PackageParse.java
java PackageParse

在这里，我们通过下面的Example.java文件得到jar文件。

jar文件具有以下属性：

执行上述程序后，将得到下面的输出。

输出:

Contents of the document:
META-INF/MANIFEST.MF
yiibai/tika/examples/Example.class

Metadata of the document:
Content-Type:   application/zip

TIKA提取图像文件 - Tika教程

下面给出的该程序是从一个JPEG图像中提取的内容和元数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.jpeg.JpegParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class JpegParse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("boy.jpg"));
      ParseContext pcontext = new ParseContext();

      //Jpeg Parse
      JpegParser  JpegParser = new JpegParser();
      JpegParser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

保存上述代码为JpegParse.java，并通过使用下面的命令从命令提示编译：

javac JpegParse.java
java JpegParse

在这里，我们通过下面的example.jpeg文件：

JPEG文件具有以下属性：

在执行上面的应用程序，会得到如下的输出。

输出:

Contents of the document:

Metadata of the document:
IPTC-NAA record: 92 bytes binary data
Number of Components: 3
Image Height: 1000 pixels
Resolution Units: inch
Data Precision: 8 bits
tiff:BitsPerSample: 8
Compression Type: Baseline
Component 1: Y component: Quantization table 0, Sampling factors 1 horiz/1 vert
Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
tiff:ImageLength: 1000
Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert
X Resolution: 300 dots
tiff:ImageWidth: 714
Application Record Version: 4
Image Width: 714 pixels
Original Transmission Reference:
 53616c7465645f5fd22a84941585d89cc735d889c9d5ac58a01faf2c92ee3c6f9bcb38359bbe1eef
Y Resolution: 300 dots

TIKA提取mp4文件 - Tika教程

下面给出的程序是用来从mp4文件提取内容和元数据：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.mp4.MP4Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class Mp4Parse {

   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("example.mp4"));
      ParseContext pcontext = new ParseContext();

      //Html parser
      MP4Parser MP4Parser = new MP4Parser();
      MP4Parser.parse(inputstream, handler, metadata,pcontext);
      System.out.println("Contents of the document:  :" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
         System.out.println(name + ": " + metadata.get(name));
      }
   }
}

保存上述代码保存为JpegParse.java，并通过使用下面的命令从命令提示编译：

javac Mp4Parse.java
java Mp4Parse

下面给出的是example.mp4的快照属性：

执行上述程序后，得到如下的输出

输出:

Contents of the document:

Metadata of the document:
dcterms:modified: 2014-01-06T12:10:27Z
meta:creation-date: 1904-01-01T00:00:00Z
meta:save-date: 2014-01-06T12:10:27Z
Last-Modified: 2014-01-06T12:10:27Z
dcterms:created: 1904-01-01T00:00:00Z
date: 2014-01-06T12:10:27Z
tiff:ImageLength: 360
modified: 2014-01-06T12:10:27Z
Creation-Date: 1904-01-01T00:00:00Z
tiff:ImageWidth: 640
Content-Type: video/mp4
Last-Save-Date: 2014-01-06T12:10:27Z

TIKA提取MP3文件 - Tika教程

下面给出的程序是用于提取MP3文件内容和元数据：

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.mp3.LyricsHandler;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class Mp3Parse {

   public static void main(final String[] args) throws Exception, IOException, SAXException, TikaException {

      //detecting the file type
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(new File("example.mp3"));
      ParseContext pcontext = new ParseContext();

      //Mp3 parser
      Mp3Parser  Mp3Parser = new  Mp3Parser();
      Mp3Parser.parse(inputstream, handler, metadata, pcontext);
      LyricsHandler lyrics = new LyricsHandler(inputstream,handler);

      while(lyrics.hasLyrics()) {
          System.out.println(lyrics.toString());
      }

      System.out.println("Contents of the document:" + handler.toString());
      System.out.println("Metadata of the document:");
      String[] metadataNames = metadata.names();

      for(String name : metadataNames) {
          System.out.println(name + ": " + metadata.get(name));
      }
   }
}

保存上述代码保存为JpegParse.java，并通过使用下面的命令从命令提示编译：

javac Mp3Parse.java
java Mp3Parse

在这里，我们传递一个example.mp3文件具有以下属性：

执行上述程序后，将得到下面的输出。

如果给定的文件有任何的歌词，我们的应用程序将捕获和显示，和输出。

输出:

Contents of the document:
Kanulanu Thaake
Arijit Singh
Manam (2014), track 01/06
2014
Soundtrack
30171.65
eng -
DRGM
Arijit Singh
Manam (2014), track 01/06
2014
Soundtrack
30171.65
eng -
DRGM

Metadata of the document:
xmpDM:releaseDate: 2014
xmpDM:duration: 30171.650390625
xmpDM:audioChannelType: Stereo
dc:creator: Arijit Singh
xmpDM:album: Manam (2014)
Author: Arijit Singh
xmpDM:artist: Arijit Singh
channels: 2
xmpDM:audioSampleRate: 44100
xmpDM:logComment: eng -
DRGM
xmpDM:trackNumber: 01/06
version: MPEG 3 Layer III Version 1
creator: Arijit Singh
xmpDM:composer: Music : Anoop Rubens | Lyrics : Vanamali
xmpDM:audioCompressor: MP3
title: Kanulanu Thaake
samplerate: 44100
meta:author: Arijit Singh
xmpDM:genre: Soundtrack
Content-Type: audio/mpeg
xmpDM:albumArtist: Manam (2014)
dc:title: Kanulanu Thaake