Tika 简明教程

TIKA - Quick Guide

TIKA - Overview

What is Apache Tika?

  1. Apache Tika 是一个用于文档类型检测和从各种文件格式中提取内容的库。

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

  3. 使用 Tika,人们可以开发一个通用类型检测器和内容提取器,以从不同类型的文档(如电子表格、文本文档、图像、PDF 甚至多媒体输入格式)中提取结构化文本和元数据。

  4. Tika 为解析不同的文件格式提供了一个通用的 API。它为每种文档类型使用现有的专门解析器库。

  5. 所有这些解析器库都封装在名为 Parser interface 的单个界面下。

appache tika

Why Tika?

根据 filext.com,大约有 15k 到 51k 的内容类型,并且这个数字每天都在增长。数据存储在各种格式中,例如文本文档、Excel 电子表格、PDF、图像和多媒体文件,仅举几例。因此,诸如搜索引擎和内容管理系统之类的应用程序需要额外的支持,以便轻松地从这些文档类型中提取数据。Apache Tika 通过提供一个通用 API 来查找和提取来自多个文件格式的数据,来实现此目的。

Apache Tika Applications

有各种应用程序使用 Apache Tika。这里我们将讨论几个主要依赖 Apache Tika 的知名应用程序。

Search Engines

在开发搜索引擎时,Tika 被广泛用于对数字文档的文本内容进行索引。

  1. 搜索引擎是信息处理系统,旨在搜索信息和从 Web 中索引文档。

  2. 爬虫是搜索引擎的一个重要组成部分,它通过 Web 爬行来获取要使用某种索引技术进行索引的文档。此后,爬虫将这些索引文档传输到提取组件。

  3. 提取组件的职责是从文档中提取文本和元数据。此类提取的内容和元数据对于搜索引擎非常有用。此提取组件包含 Tika。

  4. 提取的内容随后被传递给搜索引擎的索引器,该索引器使用它来构建搜索索引。除此之外,搜索引擎也以许多其他方式使用提取的内容。

search engine

Document Analysis

  1. 在人工智能领域,有一些工具可以在语义层面自动分析文档并从中提取各种数据。

  2. 在这些应用中,文档是根据文档中提取内容的突出术语进行分类的。

  3. 这些工具利用 Tika 进行内容提取,以分析从纯文本到数字文档的各种文档。

Digital Asset Management

  1. 一些组织使用称为数字资产管理 (DAM) 的特殊应用程序来管理其数字资产,如照片、电子书、图纸、音乐和视频。

  2. 这些应用程序借助文档类型检测器和元数据提取器来对不同文档进行分类。

Content Analysis

  1. 像亚马逊这样的网站会根据个人用户的兴趣向他们推荐其网站上新发布的内容。为此,这些网站采用 machine learning techniques ,或者借助 Facebook 等社交媒体网站来提取必要的信息,例如用户的喜好和兴趣。收集到的信息将采用 html 标签或其他需要进一步内容类型检测和提取的格式。

  2. 对于文档的内容分析,我们有利用机器学习技术的技术,例如 UIMAMahout 。这些技术对于对文档中的数据进行聚类和分析非常有用。

  3. Apache Mahout 是在 Apache Hadoop(一种云计算平台)上提供机器学习算法的框架。Mahout 通过遵循某些聚类和过滤技术提供一种架构。遵循此架构,程序员可以编写自己的机器学习算法,通过采用各种文本和元数据组合来生成推荐。为了为这些算法提供输入,Mahout 的最新版本使用 Tika 从二进制内容中提取文本和元数据。

  4. Apache UIMA 分析和处理各种编程语言,并生成 UIMA 注释。它在内部使用 Tika 注释器来提取文档文本和元数据。

History

Year

Development

2006

Tika 的想法是在 Apache 二级委员会委员会之前提出的。

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

Tika 1.0 发布,同一年也发布了 Tika 的书“Tika in Action”。

TIKA - Architecture

Application-Level Architecture of Tika

应用程序员可以轻松地在应用程序中集成 Tika。Tika 提供命令行界面和图形用户界面,以便于用户使用。

在本章中,我们将讨论构成 Tika 架构的四个重要模块。下图展示了 Tika 架构及其四个模块:

  1. Language detection mechanism.

  2. MIME detection mechanism.

  3. Parser interface.

  4. Tika Facade class.

tika architecture

Language Detection Mechanism

每当文本文档传递给 Tika 时,它将检测其书面语言。它接受没有语言注释的文档,并在检测语言后在文档的元数据中添加该信息。

为了支持语言识别,Tika 在包 org.apache.tika.language 中有一个名为 Language Identifier 的类,以及其中包含用于从给定文本中检测语言的算法的语言识别存储库。Tika 在内部使用 N-gram 算法进行语言检测。

MIME Detection Mechanism

Tika 可以根据 MIME 标准检测文档类型。Tika 中的默认 MIME 类型检测使用 org.apache.tika.mime.mimeTypes 来完成。它对大多数内容类型检测使用 org.apache.tika.detect.Detector 接口。

在内部,Tika 使用了多种技术,如文件全局、内容类型提示、魔术字节、字符编码和其他多种技术。

Parser Interface

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

Tika 使用适用于各个文档类型的不同具体解析器类,从而支持许多文档格式。这些特定于格式的类通过直接实现解析逻辑或通过使用外部解析器库来支持不同的文档格式。

Tika Facade Class

使用 Tika 外观类是从 Java 调用 Tika 的最简单、最直接的方式,并且它遵循外观设计模式。你可以在 Tika API 的 org.apache.tika 包中找到 Tika 外观类。

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

Features of Tika

  1. Unified parser Interface − Tika 将所有第三方解析器库封装在一个解析器接口中。由于这个特性,用户无需再承受选择合适的解析器库并按照遇到的文件类型进行使用的负担。

  2. Low memory usage − Tika 消耗的内存资源较少,因此很容易嵌入到 Java 应用程序中。我们还可以在资源较少的平台(如移动 PDA)上运行的应用程序中使用 Tika。

  3. Fast processing − 可以预期从应用程序快速检测和提取内容。

  4. Flexible metadata − Tika 理解所有用于描述文件元数据的模型。

  5. Parser integration − Tika 可以在一个应用程序中使用为每种文档类型提供的各种解析器库。

  6. MIME type detection − Tika 可以检测和提取 MIME 标准中包含的所有媒体类型的内容。

  7. Language detection − Tika 包含语言识别特性,因此可以在多语言网站中基于语言类型用于文档。

Functionalities of Tika

Tika 支持各种功能:

  1. Document type detection

  2. Content extraction

  3. Metadata extraction

  4. Language detection

Document Type Detection

Tika 使用各种检测技术检测给定文档的类型。

detection

Content Extraction

Tika 拥有一个解析程序库,该库可以解析各种文档格式的内容并提取出来。在检测到文档类型之后,它从解析器容器中选择相应的解析器并传递该文档。Tika 的不同类具有不同的方法来解析不同的文档格式。

extraction

Metadata Extraction

除了内容之外,Tika 还通过与内容提取中相同的方法提取文档的元数据。对于某些类型的文档,Tika 具有提取元数据的类。

extraction1

Language Detection

在内部,Tika 遵循 n-gram 一类的算法来检测给定文档中内容的语言。Tika 依赖 LanguageidentifierProfiler 等类来进行语言识别。

detection1

TIKA - Environment

本章将指导您完成在 Windows 和 Linux 上设置 Apache Tika 的过程。安装 Apache Tika 时需要进行用户管理。

System Requirements

JDK

Java SE 2 JDK 1.6 或更高版本

Memory

1 GB RAM (recommeneded)

Disk Space

No minimum requirement

Operating System Version

Windows XP 或更高版本、Linux

Step 1: Verifying Java Installation

为验证 Java 安装,打开控制台并执行以下 java 命令:

OS

Task

Command

Windows

Open command console

>java –version

Linux

Open command terminal

$java –version

如果 Java 已在你的系统中正确安装,那么你应该获得以下某个输出,具体取决于你在哪个平台上工作。

OS

Output

Windows

Java version "1.7.0_60"Java ™ SE 运行时环境 (版本 1.7.0_60-b19)Java Hotspot ™ 64 位服务器 VM (版本 24.60-b09,混合模式)

Lunix

java 版本 “1.7.0_25”打开 JDK 运行时环境 (rhel-2.3.10.4.el6_4-x86_64)Open JDK 64 位服务器 VM(内部版本 23.7-b01,混合模式)

  1. 在继续本教程之前,我们假设本教程的读者已在其系统中安装了 Java 1.7.0_60。

  2. 如果您没有 Java SDK,则从 https://www.oracle.com/technetwork/java/javase/downloads/index.html and have it installed 下载其当前版本。

Step 2: Setting Java Environment

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

OS

Output

Windows

将环境变量 JAVA_HOME 设置为 C:\ProgramFiles\java\jdk1.7.0_60

Linux

export JAVA_HOME = /usr/local/java-current

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

OS

Output

Windows

将字符串 C:\Program Files\Java\jdk1.7.0_60\bin 追加到系统变量 PATH 的末尾。

Linux

export PATH = $PATH:$JAVA_HOME/bin/

如上所述,从命令提示符验证命令 java-version。

Step 3: Setting up Apache Tika Environment

程序员可通过以下方式将 Apache Tika 集成到其环境中:

  1. Command line,

  2. Tika API,

  3. Tika 的命令行界面 (CLI),

  4. Tika 的图形用户界面 (GUI),或者

  5. the source code.

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

您可以在 https://Tika.apache.org/download.html, 中找到 Tika 的源代码,您将在该位置找到两个链接 −

  1. apache-tika-1.6-src.zip − 包含 Tika 的源代码,以及

  2. Tika -app-1.6.jar − 包含 Tika 应用程序的 jar 文件。

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

tika environment

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

OS

Output

Windows

将字符串“C:\jars\Tika-app-1.6.jar”附加到用户环境变量 CLASSPATH

Linux

导出 CLASSPATH = $CLASSPATH −/usr/share/jars/Tika-app-1.6.tar −

Apache 提供 Tika 应用程序,即使用 Eclipse 的图形用户界面 (GUI) 应用程序。

Tika-Maven Build using Eclipse

  1. 打开 Eclipse 并创建一个新项目。

  2. 如果您在 Eclipse 中没有 Maven,请按照给定的步骤进行设置。打开 link https://wiki.eclipse.org/M2E_updatesite_and_gittags 。在那里您会发现表格格式的 m2e 插件版本

m2e release
  1. 选择最新版本并将 url 的路径保存在 p2 url 列中。

  2. 现在重新访问 Eclipse,在菜单栏中,单击 Help ,并从下拉菜单中选择 Install New Software

eclipse
  1. 单击 Add 按钮,输入任意所需名称,因为它是可选的。现在将已保存的 url 粘贴在 Location 字段中。

  2. 将添加一个新插件,其名称为您在上一步中选择的名称,选中前面对应的复选框,然后单击 Next

install
  1. 继续安装。完成后,重启 Eclipse。

  2. 现在右击该项目,并在 configure 选项中选择 convert to maven project

  3. 创建新 pom 的一个新向导出现。输入 Group Id 为 org.apache.tika,输入最新版本的 Tika,选择 packaging 作为 jar,然后单击 Finish

Maven 项目已成功安装,您的项目已转换为 Maven。现在,您必须配置 pom.xml 文件。

Configure the XML File

下面显示的是 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 - Referenced API

用户可以使用 Tika facade 类将 Tika 嵌入到他们的应用程序中。它提供了要探索 Tika 所有功能的方法。由于它是一个 facade 类,Tika 会将其函数背后的复杂性抽象化。除此之外,用户还可以在其应用程序中使用各种 Tika 类。

user application

Tika Class (facade)

这是 Tika 库中最突出的一个类,遵循门面设计模式。因此,它抽象了所有内部实现,并提供了访问 Tika 功能的简单方法。下表列出了此类的构造函数及其说明。

package − org.apache.tika

class − Tika

Sr.No.

Constructor & Description

1

Tika () 使用默认配置并构建 Tika 类。

2

Tika (Detector detector) 通过接受检测器实例作为参数创建 Tika facade。

3

Tika (Detector detector, Parser parser) 通过接受检测器和解析器实例作为参数创建 Tika facade。

4

Tika (Detector detector, Parser parser, Translator translator) 通过接受检测器、解析器和翻译器实例作为参数创建 Tika facade。

5

Tika (TikaConfig config) 通过接受 TikaConfig 类作为参数的对象来创建 Tika 门面。

Methods and Description

以下为 Tika 门面类的重要方法 −

Sr.No.

Methods & Description

1

parse*ToString* ( File 文件)此方法及其所有变体解析作为参数传递的文件,并以字符串格式返回提取的文本内容。默认情况下,此字符串参数的长度是有限的。

2

int getMaxStringLength ()返回 parseToString 方法返回的字符串的最大长度。

3

void setMaxStringLength (int maxStringLength)设置 parseToString 方法返回的字符串的最大长度。

4

Reader parse ( File 文件)此方法及其所有变体解析作为参数传递的文件,并返回以 java.io.reader 对象形式提取的文本内容。

5

String detect ( InputStream 流, Metadata 元数据)此方法及其所有变体接受 InputStream 对象和 Metadata 对象作为参数,检测给定文档的类型,并将文档类型名称作为 String 对象返回。此方法抽象了 Tika 使用的检测机制。

6

String translate ( InputStream 文本, String 目标语言)此方法及其所有变体接受 InputStream 对象和表示我们希望文本被翻译成的语言的 String,并将给定文本翻译成所需语言,尝试自动检测源语言。

Parser Interface

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

package − org.apache.tika.parser

Interface − Parser

Methods and Description

以下是 Tika 解析器接口的重要方法 −

Sr.No.

Methods & Description

1

parse (InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) 此方法将给定文档解析成 XHTML 和 SAX 事件序列。解析后,它将提取的文档内容放入 ContentHandler 类的对象,并将元数据放入 Metadata 类的对象中。

Metadata Class

此类实现了各种接口,例如 CreativeCommons、Geographic、HttpHeaders、Message、MSOffice、ClimateForcast、TIFF、TikaMetadataKeys、TikaMimeKeys、Serializable,以支持各种数据模型。下表列出了该类的构造函数和方法及其说明。

package − org.apache.tika.metadata

class − Metadata

Sr.No.

Constructor & Description

1

Metadata() 构造一个新的、空的元数据。

Sr.No.

Methods & Description

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) 为元数据属性设置多个值。

Language Identifier Class

此类标识给定内容的语言。下表列出了此类的构造函数及其说明。

package − org.apache.tika.language

class − Language Identifier

Sr.No.

Constructor & Description

1

LanguageIdentifier (LanguageProfile profile) 实例化语言标识符。在此处,您必须传递 LanguageProfile 对象作为参数。

2

LanguageIdentifier (String content) 此构造函数可以通过从文本内容传递 String 来实例化语言标识。

Sr.No.

Methods & Description

1

String getLanguage () 返回给定 LanguageIdentifier 对象的语言。

TIKA - File Formats

File Formats Supported by Tika

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

File format

Package Library

Class in Tika

XML

org.apache.tika.parser.xml

XMLParser

HTML

org.apache.tika.parser.html 并且它使用 Tagsoup 库

HtmlParser

MS-Office 复合文档 Ole2 直到 2007 年,2007 年以后为 ooxml

org.apache.tika.parser.microsoftorg.apache.tika.parser.microsoft.ooxml 并且它使用 Apache Poi 库

OfficeParser(ole2) OOXMLParser (ooxml)

OpenDocument Format openoffice

org.apache.tika.parser.odf

OpenOfficeParser

portable Document Format(PDF)

org.apache.tika.parser.pdf 并且此包使用 Apache PdfBox 库

PDFParser

电子出版格式(数字图书)

org.apache.tika.parser.epub

EpubParser

Rich Text format

org.apache.tika.parser.rtf

RTFParser

Compression and packaging formats

org.apache.tika.parser.pkg 并且此包使用 Common compress 库

PackageParser 和 CompressorParser 及其子类

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 - 用于 mp3parser

Imageparsers

org.apache.tika.parser.jpeg

JpegParser-for jpeg images

Videoformats

org.apache.tika.parser.mp4 和 org.apache.tika.parser.video 此解析器在内部使用 Simple Algorithm 来解析 flash video 格式

Mp4parser FlvParser

java 类文件和 jar 文件

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 - Document Type Detection

MIME Standards

多用途因特网邮件扩展 (MIME) 标准是识别文档类型的最佳可用标准。了解这些标准有助于浏览器在内部交互期间。

无论何时浏览器遇到媒体文件,它都会选择与其兼容的可用软件来显示其内容。如果浏览器没有任何合适的应用程序来运行某个特定的媒体文件,它会建议用户获取合适的插件软件。

Type Detection in Tika

Tika 支持 MIME 中提供的所有 Internet 媒体文档类型。无论何时文件通过 Tika,它都会检测出来文件及其文档类型。为检测媒体类型,Tika 在内部使用以下机制。

File Extensions

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

File name

Extention

image

.jpg

audio

.mp3

java archive file

.jar

java class file

.class

Content-type Hints

无论何时从数据库中检索文件或将其附加到另一份文件时,您都可能丢失文件的名称或扩展名。在这些情况下,使用随文件提供 的元数据来检测文件扩展名。

Magic Byte

观察文件的原始字节,您可以找到每个文件的某些唯一字符模式。某些文件具有称为 magic bytes 的特殊字节前缀,这些字节前缀是专门为 识别文件类型而在文件中制作和包含的。

例如,您能在 java 文件中找到 CA FE BA BE(十六进制格式)和在 pdf 文件中找到 %PDF(ASCII 格式)。Tika 使用此信息来识别文件的媒体类型。

Character Encodings

带纯文本的文件使用不同类型的字符编码进行编码。此处的首要挑战是识别文件中使用的字符编码类型。Tika 使用 Bom markersByte Frequencies 等字符编码技术来识别纯文本内容使用的编码系统。

XML Root Characters

为检测 XML 文档,Tika 解析 xml 文档并从其中提取根元素、命名空间以及可从中找到文件的真实媒体类型的引用的架构等信息。

Type Detection using Facade Class

detect() 方法用于检测文档类型。此方法将文件作为输入。下面显示的是通过 Tika facade 类检测文档类型的示例程序。

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 - Content Extraction

Tika 使用各种解析器库从给定的解析器中提取内容。它选择合适的解析器来提取给定的文档类型。

对于解析文档,通常使用 Tika facade 类的 parseToString() 方法。下面显示了解析过程中的步骤,这些步骤由 Tika ParsertoString() 方法抽象出来。

parsing process

抽象解析过程 -

  1. 最初,当我们将文档传递给 Tika 时,它使用可用的合适类型检测机制并检测文档类型。

  2. 一旦知道了文档类型,它就会从其解析器存储库中选择合适的解析器。解析器存储库包含使用外部库的类。

  3. 然后将文档传递给选择解析器的解析器,该解析器将解析内容、提取文本,并针对无法读取的格式抛出异常。

Content Extraction using 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 tutorialspoint

它给你以下输出 -

Extracted Content: Hi students welcome to tutorialspoint

Content Extraction using Parser Interface

Tika 的 parser 包提供了多个接口和类,我们可使用它们来解析文本文档。下面给出了 org.apache.tika.parser 包的框图。

parser interface

有几个解析器类可用,例如,pdf 解析器、Mp3Passer、OfficeParser 等,可分别解析各自的文档。所有这些类都实现了解析器接口。

CompositeParser

给定的框图显示了 Tika 的通用解析器类: CompositeParserAutoDetectParser 。由于 CompositeParser 类遵循复合设计模式,因此可以将一组解析器实例用作单个解析器。CompositeParser 类还允许访问实现解析器接口的所有类。

AutoDetectParser

这是 CompositeParser 的子类,它提供自动类型检测。使用此功能,AutoDetectParser 使用复合方法自动将传入文档发送到适当的解析器类。

parse() method

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

parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)

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

Sr.No.

Object & Description

1

InputStream stream 包含文件内容的任何 Inputstream 对象

2

ContentHandler handler Tika 通过 SAX API 将文档作为 XHTML 内容传给此处理程序,然后使用 SAX API 处理文档。它可以有效地对文档中的内容进行后期处理。

3

Metadata metadata 元数据对象用作文档元数据的源和目标。

4

ParseContext context 此对象在客户端应用程序希望自定义解析过程的情况下使用。

Example

以下是显示如何使用 parse() 方法的示例。

Step 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

Step 2 -

创建处理程序类对象。以下是三个内容处理程序 -

Sr.No.

Class & Description

1

BodyContentHandler 此类挑选 XHTML 输出的主体部分,并将该内容写入输出写入器或输出流中。然后,它将 XHTML 内容重定向到另一个内容处理程序实例。

2

LinkContentHandler 此类检测并挑选 XHTML 文档的所有 H-Ref 标记,并将其转发给像网络爬虫这样的工具使用。

3

TeeContentHandler 此类有助于同时使用多个工具。

由于我们的目标是从文档中提取文本内容,因此,请按如下所示实例化 BodyContentHandler -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

按如下所示创建 Metadata 对象 -

Metadata metadata = new Metadata();

Step 4 -

创建任何输入流对象,并将应从中提取的文件传递给它。

FileInputstream

将文件路径作为参数传递以实例化文件对象,并将此对象传递到 FileInputStream 类构造函数中。

Note - 传递到文件对象的路径不应包含空格。

这些输入流类的问题在于不支持随机访问读取,而这是有效处理某些文件格式所必需的。为了解决此问题,Tika 提供了 TikaInputStream。

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

Step 5 -

按如下所示创建解析上下文对象 -

ParseContext context =new ParseContext();

Step 6 -

实例化解析器对象,调用解析方法,并传递所有必需的对象,如下面的原型所示 -

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 tutorialspoint

如果您执行上述程序,它将为您提供以下输出 -

File content : Hi students welcome to tutorialspoint

TIKA - Metadata Extraction

除了内容之外,Tika 还从文件中提取元数据。元数据只不过是随文件提供的附加信息。如果我们考虑一个音频文件,艺术家姓名、专辑名称、标题都属于元数据。

XMP Standards

可扩展元数据平台 (XMP) 是处理和存储与文件内容相关的信息的标准。它由 Adobe Systems Inc 创建。XMP 提供了用于定义、创建和处理 metadata 的标准。您可以将此标准嵌入到 PDFJPEGJPEGGIFjpgHTML 等多种文件格式中。

Property Class

Tika 使用 Property 类遵循 XMP 财产定义。它提供了 PropertyTypeValueType 枚举来捕获元数据的名称和值。

Metadata Class

此类实现了 ClimateForcast 、CativeCommons、 Geographic 、TIFF 等各种接口,以提供对各种元数据模型的支持。此外,此类还提供了从文件中提取内容的各种方法。

Metadata Names

我们可以使用 names() 方法从文件的元数据对象中提取该文件所有元数据名称的列表。它以字符串数组的形式返回所有名称。使用元数据的名称,我们可以使用 get() 方法获取值。它获取一个元数据名称并返回与之关联的值。

String[] metadaNames = metadata.names();

String value = metadata.get(name);

Extracting Metadata using Parse Method

每当我们使用 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 的快照。

boy

如果您执行上述程序,它将为您提供以下输出 -

X-Parsed-By: org.apache.tika.parser.DefaultParser
Resolution Units: inch
Compression Type: Baseline
Data Precision: 8 bits
Number of Components: 3
tiff:ImageLength: 3000
Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert
Image Height: 3000 pixels
X Resolution: 300 dots
Original Transmission Reference:
   53616c7465645f5f2368da84ca932841b336ac1a49edb1a93fae938b8db2cb3ec9cc4dc28d7383f1
Image Width: 4000 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: 4000
Content-Type: image/jpeg
Y Resolution: 300 dots

我们还可以获取我们需要的元数据值。

Adding New Metadata Values

可以使用 metadata 类的 add() 方法添加新元数据值。以下是此方法的语法。此处我们正在添加作者姓名。

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

Metadata 类具有预定义的属性,包括从 ClimateForcast 、CativeCommons、 Geographic 等类继承的属性,以支持各种数据模型。下面显示了从 Tika 实现的 TIFF 接口继承的 SOFTWARE 数据类型的用法,以便遵循针对 TIFF 图像格式的 XMP 元数据标准。

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 tutorialspoint

如果您执行上述程序,它将为您提供以下输出 -

metadata elements of the given file :
[Content-Encoding, Content-Type]
enter the number of metadata name value pairs to be added 1
enter metadata1name:
Author enter metadata1value:
Tutorials point 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]

Setting Values to Existing Metadata Elements

可以使用 set() 方法将值设为现有元数据元素。使用 set() 方法设置 date 属性的语法如下所示 −

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

您还可以使用 set() 方法向属性设置多个值。使用 set() 方法向 Author 属性设置多个值的语法如下所示 −

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

以下是 example.txt 的内容。

Hi students welcome to tutorialspoint

如果您执行上面的程序,它将为您提供以下输出。在输出中,您可以观察到新增的元数据元素。

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 - Language Detection

Need for Language Detection

对于根据多语言网站中书写语言对文档进行分类,需要使用语言检测工具。此工具应接受没有语言注释(元数据)的文档,并通过检测语言将该信息添加到文档的元数据中。

Algorithms for Profiling Corpus

What is Corpus?

要检测文档的语言,需要构建语言配置文件,并将其与已知语言的配置文件进行比较。这些已知语言的文本集称为 corpus

语料库是一组书面语言的文本集合,用于说明在实际情况下如何使用该语言。

语料库是从书籍、成绩单以及互联网等其他数据资源开发的。语料库的准确性取决于我们用来构建语料库的分析算法。

What are Profiling Algorithms?

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

特定语言中使用的常用单词列表将成为用于检测特定语言的最简单且最有效的语料库,例如,英语中的冠词 aanthe

Using Word Sets as Corpus

使用单词集,一个简单的算法把两个语料库之间的距离表达为匹配单词的频率之间的差值的求和。

此类算法有以下问题:

  1. 由于匹配单词的频率非常低,该算法无法有效处理只有几个句子的短文。它需要大量文本才能进行精确匹配。

  2. 它无法检测具有复合句的语言的单词边界,以及没有空格或标点符号等单词分隔符的语言的单词边界。

由于在使用单词集作为语料库中存在这些困难,因此考虑单个字符或字符组。

Using Character Sets as Corpus

由于某一语言中常用的字符数量有限,因此很容易应用基于单词频率而不是字符的算法。这种算法对于一种或极少数语言中使用的特定字符集表现得非常好。

该算法有如下缺点:

  1. 难以区分具有相似字符频率的两种语言。

  2. 没有具体的工具或算法可以使用多个语言使用的字符集(作为语料库)来专门识别一种语言。

N-gram Algorithm

上述缺点催生了一种新方法,即使用给定长度的字符序列来描述语料库。此类字符序列通常称为 n 元词,其中 n 表示字符序列的长度。

  1. n 元算法是一种有效的语言检测方法,特别是在英语等欧洲语言的情况下。

  2. 该算法与短文配合效果很好。

  3. 虽然有高级语言描述算法可以检测多语言文档中具有更吸引人的功能的多语言,但是 Tika 使用 3 元词算法,因为它适用于大多数实际情况。

Language Detection in Tika

在 ISO 639-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

在实例化 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

Language Detection of a Document

要检测给定文档的语言,你必须使用 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

下面给出 Example.txt 的内容。

Hi students welcome to tutorialspoint

如果您执行上述程序,它将为您提供以下输出 -

Language name :en

除了 Tika Jar,Tika 还提供了图形用户界面应用程序 (GUI) 和命令行界面 (CLI) 应用程序。你也可以像其他 Java 应用程序一样从命令提示符执行 Tika 应用程序。

TIKA - GUI

Graphical User Interface (GUI)

  1. Tika 提供一个 jar 文件以及其源代码(在以下链接中): https://tika.apache.org/download.html.

  2. 下载这两个文件,设置 jar 文件的类路径。

  3. 提取源代码 zip 文件夹,打开 tika-app 文件夹。

  4. 在“tika-1.6\tika-app\src\main\java\org\apache\Tika\gui”的提取文件夹中,您将看到两个类文件: ParsingTransferHandler.javaTikaGUI.java

  5. 将这两个类文件编译后,执行 TikaGUI.java 类文件,它将打开以下窗口。

open window

现在,让我们来看看如何使用 Tika GUI。

在 GUI 上,单击 open(打开),浏览并选择要提取的文件,或将其拖动到窗口的空白处。

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

同样,你也可以在“tika-1.6\tikaapp\src\main\java\org\apache\tika\cli”文件夹中找到 CLI 类。

以下插图显示了 Tika 的功能。当我们将图像拖放到 GUI 上时,Tika 会提取并显示其元数据。

gui

TIKA - Extracting PDF

下面是用于从 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 example

我们传递的 PDF 具有以下属性 −

pdf example1

编译程序后,您将得到如下所示的输出。

Output

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 - Extracting ODF

以下是从开放文档格式(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 文件的快照。

presentation

此文档具有以下属性 −

example2

编译程序后,您将获得以下输出。

Output

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 - Extracting MS-Office Files

以下是从 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

这里我们传递以下示例 Excel 文件。

passing excel

给定的 Excel 文件具有以下属性:

excel properties

执行上述程序后,您将获得以下输出。

Output

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 - Extracting Text Document

以下是用于从文本文档中提取内容和元数据的程序 −

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

以下是 sample.txt 文件的快照 -

simple document

该文本文档具有以下属性 -

document properties

如果您执行上述程序,它会为您提供以下输出。

Output

Contents of the document:

At tutorialspoint.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 Mohtashim, an AMU alumni, who is the founder and the managing
director of Tutorials Point (I) Pvt. Ltd. He came up with the website tutorialspoint.com
in year 2006 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 - Extracting HTML Document

下面给出从 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.html"));
      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.txt 文件的快照。

example3

HTML 文档具有以下属性−

document properties1

如果您执行上述程序,它会为您提供以下输出。

Output

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 - Extracting XML Document

下面是用于从 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

下面给出了 example.xml 文件的快照

xml document

此文档具有以下属性 −

xml document1

如果您执行上述程序,它将给您以下输出 −

Output

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 - Extracting .class File

以下是从 .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.class 的 Example.java 的快照。

java excel

Example.class 文件具有以下属性 -

example class

执行上述程序后,您将获得以下输出。

Output

Contents of the document:

package tutorialspoint.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 - Extracting JAR File

下面给出了从 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 的快照,它位于包内。

java example

jar 文件具有以下属性 −

jar example

在执行上述程序后,它将给你以下输出 −

Output

Contents of the document:

META-INF/MANIFEST.MF
tutorialspoint/tika/examples/Example.class

Metadata of the document:

Content-Type:   application/zip

TIKA - Extracting Image File

下面是用于从 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 的快照 −

baby

JPEG 文件具有以下属性 −

property

执行程序后,您将得到以下输出。

Output −

Contents of the document:

Meta data of the document:

Resolution Units: inch
Compression Type: Baseline
Data Precision: 8 bits
Number of Components: 3
tiff:ImageLength: 3000
Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert
Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert
Image Height: 3000 pixels
X Resolution: 300 dots
Original Transmission Reference: 53616c7465645f5f2368da84ca932841b336ac1a49edb1a93fae938b8db2cb3ec9cc4dc28d7383f1
Image Width: 4000 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: 4000
Y Resolution: 300 dots

TIKA - Extracting mp4 Files

下面提供了从 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 文件的属性快照。

passing mp4

执行上述程序后,你将看到以下输出 −

Output

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 - Extracting mp3 Files

以下是用于从 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 文件具有以下属性 −

example mp3

在执行该程序后,你将获得以下输出。如果给定的文件有任何歌词,我们的应用程序将捕获并显示这些歌词连同输出。

Output

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