目录

TIKA - 快速指南

TIKA - Overview

什么是Apache Tika?

  • Apache Tika是一个用于从各种文件格式中检索文档类型和内容的库。

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

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

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

  • 所有这些解析器库都封装在称为Parser interface的单个接口下。

阿帕奇蒂卡

为什么Tika?

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

Apache Tika应用程序

有各种应用程序可以使用Apache Tika。 在这里,我们将讨论一些严重依赖Apache Tika的重要应用程序。

搜索引擎

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

  • 搜索引擎是用于从Web搜索信息和索引文档的信息处理系统。

  • Crawler是搜索引擎的重要组成部分,它通过Web抓取以使用某种索引技术获取要编制索引的文档。 此后,爬虫将这些索引文档传送到提取组件。

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

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

搜索引擎

文件分析

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

  • 在这样的应用中,基于提取的文档内容中的突出术语对文档进行分类。

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

数字资产管理

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

  • 这些应用程序借助文档类型检测器和元数据提取器来对各种文档进行分类。

内容分析

  • 亚马逊等网站根据自己的兴趣向个人用户推荐新发布的网站内容。 为此,这些网站遵循machine learning techniques ,或借助Facebook等社交媒体网站的帮助来提取所需信息,例如用户的喜好和兴趣。 这些收集的信息将采用html标签或其他格式的形式,需要进一步的内容类型检测和提取。

  • 对于文档的内容分析,我们拥有实现机器学习技术的技术,如UIMAMahout 。 这些技术可用于聚类和分析文档中的数据。

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

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

历史 (History)

发展
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 Tika 1.0发布,Tika“Tika in Action”的书也在同年发行。

TIKA - Architecture

Tika的应用程序级架构

应用程序员可以轻松地将Tika集成到他们的应用程序中 Tika提供命令行界面和GUI,使用户友好。

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

  • 语言检测机制。
  • MIME detection mechanism.
  • Parser interface.
  • Tika Facade课程。
蒂卡建筑

语言检测机制

每当文本文档传递给Tika时,它都会检测它的编写语言。 它接受没有语言注释的文档,并通过检测语言将该信息添加到文档的元数据中。

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

MIME检测机制

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

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

分析器接口

org.apache.tika.parser的解析器接口是解析Tika中文档的关键接口。 此接口从文档中提取文本和元数据,并为愿意编写解析器插件的外部用户汇总它。

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

蒂卡门面课程

使用Tika facade类是从Java调用Tika的最简单直接的方法,它遵循门面设计模式。 您可以在Tika API的org.apache.tika包中找到Tika facade类。

通过实施基本用例,Tika充当了景观经纪人。 它抽象了Tika库的底层复杂性,如MIME检测机制,解析器接口和语言检测机制,并为用户提供了一个简单的界面。

蒂卡的特点

  • Unified parser Interface - Tika在单个解析器接口中封装所有第三方解析器库。 由于这个特性,用户摆脱了选择合适的解析器库的负担,并根据遇到的文件类型使用它。

  • Low memory usage - Tika占用的内存资源较少,因此可以轻松嵌入Java应用程序。 我们还可以在应用程序中使用Tika,该应用程序在移动PDA等资源较少的平台上运行。

  • Fast processing - 可以预期从应用程序中快速检测和提取内容。

  • Flexible metadata - Tika了解用于描述文件的所有元数据模型。

  • Parser integration - Tika可以在单个应用程序中为每种文档类型使用各种解析器库。

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

  • Language detection - Tika包括语言识别功能,因此可以在多语言网站中基于语言类型的文档中使用。

Tika的功能

Tika支持各种功能 -

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

文件类型检测

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

发现

内容提取

Tika有一个解析器库,可以解析各种文档格式的内容并提取它们。 在检测到文档类型后,它从解析器存储库中选择适当的解析器并传递文档。 不同类别的Tika有解析不同文档格式的方法。

萃取

元数据提取

与内容一起,Tika使用与内容提取相同的过程提取文档的元数据。 对于某些文档类型,Tika有提取元数据的类。

Extraction1

语言检测

在内部,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(推荐)
磁盘空间 没有最低要求
操作系统版本 Windows XP或更高版本,Linux

第1步:验证Java安装

要验证Java安装,请打开控制台并执行以下java命令。

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

如果已在系统上正确安装Java,则应根据您正在使用的平台获得以下输出之一。

OS output
Windows

Java版“1.7.0_60”

Java(TM)SE运行时环境(版本1.7.0_60-b19)

Java Hotspot(TM)64位服务器VM(内置24.60-b09,混合模式)

Lunix

java版“1.7.0_25”

打开JDK运行时环境(rhel-2.3.10.4.el6_4-x86_64)

打开JDK 64位服务器VM(内置23.7-b01,混合模式)

第2步:设置Java环境

将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。

第3步:设置Apache Tika环境

程序员可以通过使用将Apache Tika集成到他们的环境中

  • 命令行,
  • Tika API,
  • Tika的命令行界面(CLI),
  • Tika的图形用户界面(GUI),或
  • 源代码。

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

您可以在https://Tika.apache.org/download.html,找到Tika的源代码,在那里您可以找到两个链接 -

  • 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

导出CLASSPATH = $ CLASSPATH -

/usr/share/jars/Tika-app-1.6.tar -

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

Tika-Maven使用Eclipse构建

m2e发布
  • 选择最新版本并在p2 url列中保存url的路径。

  • 现在重新访问eclipse,在菜单栏中单击“ Help ,然后从下拉菜单中选择“ Install New Software

日食
  • 单击“ Add按钮,键入任意名称,因为它是可选的。 现在将已保存的URL粘贴到“ Location字段中。

  • 将添加一个新插件,其中包含您在上一步中选择的名称,选中前面的复选框,然后单击“ Next

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

  • 现在右键单击该项目,然后在configure选项中选择convert to maven project

  • 将出现一个用于创建新pom的新向导。 输入组ID作为org.apache.tika,输入最新版本的Tika,选择packaging为jar,然后单击Finish

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

配置XML文件

https://mvnrepository.com/artifact/org.apache.tika获取Tika maven依赖关系

下面显示的是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的所有功能。 由于它是一个门面类,Tika抽象了其功能背后的复杂性。 除此之外,用户还可以在其应用程序中使用各种类型的Tika。

用户申请

Tika Class (facade)

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

package - org.apache.tika

class - 蒂卡

Sr.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)

通过接受TikaConfig类的对象作为参数来创建Tika外观。

方法和描述

以下是Tika门面课的重要方法 -

Sr.No. 方法和描述
1

解析ToStringFile文件)

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

2

int getMaxStringLength ()

返回parseToString方法返回的字符串的最大长度。

3

void setMaxStringLength (int maxStringLength)

设置parseToString方法返回的字符串的最大长度。

4

读者parseFile文件)

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

5

字符串detectInputStream流, Metadata数据Metadata数据)

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

6

String translateInputStream text, String targetLanguage)

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

分析器接口

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

package - org.apache.tika.parser

Interface - 解析器

方法和描述

以下是Tika Parser界面的重要方法 -

Sr.No. 方法和描述
1

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

此方法将给定文档解析为一系列XHTML和SAX事件。 解析后,它将提取的文档内容放在ContentHandler类的对象中,并将元数据放在Metadata类的对象中。

元数据类

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

package - org.apache.tika.metadata

class - 元数据

Sr.No. 构造函数和描述
1

Metadata()

构造一个新的空元数据。

Sr.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)

返回Date元数据属性的值。

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 - 语言标识符

Sr.No. 构造函数和描述
1

LanguageIdentifier (LanguageProfile profile)

实例化语言标识符。 在这里,您必须将LanguageProfile对象作为参数传递。

2

LanguageIdentifier (String content)

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

Sr.No. 方法和描述
1

String getLanguage ()

返回给当前LanguageIdentifier对象的语言。

TIKA - File Formats

Tika支持的文件格式

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

文件格式 包库 蒂卡班
XMLorg.apache.tika.parser.xmlXMLParser
HTML org.apache.tika.parser.html它使用了Tagsoup Library HtmlParser
MS-Office复合文档Ole2到2007年ooxml 2007年起

org.apache.tika.parser.microsoft

org.apache.tika.parser.microsoft.ooxml,它使用Apache Poi库

OfficeParser(OLE2)

OOXMLParser(ooxml)

OpenDocument格式openoffice org.apache.tika.parser.odfOpenOfficeParser
便携式文件格式(PDF) org.apache.tika.parser.pdf和这个包使用Apache PdfBox库 PDFParser
电子出版物格式(数字图书) org.apache.tika.parser.epubEpubParser
富文本格式 org.apache.tika.parser.rtfRTFParser
压缩和包装格式 org.apache.tika.parser.pkg和这个包使用Common压缩库 PackageParser和CompressorParser及其子类
文字格式 org.apache.tika.parser.txtTXTParser
Feed和联合格式 org.apache.tika.parser.feedFeedParser
音频格式 org.apache.tika.parser.audio和org.apache.tika.parser.mp3 AudioParser MidiParser Mp3-适用于mp3parser
Imageparsersorg.apache.tika.parser.jpeg JpegParser-用于jpeg图像
Videoformats org.apache.tika.parser.mp4和org.apache.tika.parser.video这个解析器在内部使用简单算法来解析flash视频格式 Mp4parser FlvParser
java类文件和jar文件 org.apache.tika.parser.asm ClassParser CompressorParser
Mobxformat(电子邮件) org.apache.tika.parser.mboxMobXParser
Cad格式 org.apache.tika.parser.dwgDWGParser
FontFormatsorg.apache.tika.parser.fontTrueTypeParser
可执行程序和库 org.apache.tika.parser.executableExecutableParser

TIKA - Document Type Detection

MIME标准

多用途Internet邮件扩展(MIME)标准是用于标识文档类型的最佳可用标准。 这些标准的知识有助于浏览器在内部交互过程中。

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

Tika中的类型检测

Tika支持MIME中提供的所有Internet媒体文档类型。 每当文件通过Tika传递时,它都会检测文件及其文档类型。 为了检测媒体类型,Tika内部使用以下机制。

文件扩展名

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

文件名 Extention
image.jpg
audio.mp3
java档案文件 .jar
java类文件 .class

Content-type Hints

无论何时从数据库检索文件或将其附加到其他文档,您都可能丢失文件的名称或扩展名。 在这种情况下,随文件提供的元数据用于检测文件扩展名。

魔术字节

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

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

字符编码

具有纯文本的文件使用不同类型的字符编码进行编码。 这里的主要挑战是识别文件中使用的字符编码的类型。 Tika遵循Bom markersByte Frequencies等字符编码技术来识别纯文本内容使用的编码系统。

XML根字符

为了检测XML文档,Tika解析xml文档并提取诸如根元素,命名空间和引用模式之类的信息,从中可以找到文件的真实媒体类型。

使用Facade类进行类型检测

facade类的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()方法提取。

解析过程

摘要解析过程 -

  • 最初,当我们将文档传递给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 iowiki

它为您提供以下输出 -

Extracted Content: Hi students welcome to iowiki

使用分析器接口进行内容提取

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

分析器接口

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

CompositeParser (CompositeParser)

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

AutoDetectParser

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

parse() method

与parseToString()一起,您还可以使用解析器接口的parse()方法。 该方法的原型如下所示。

parse(<a href="http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" rel="nofollow" target="_blank">InputStream</a> stream, <a href="http://docs.oracle.com/javase/6/docs/api/org/xml/sax/ContentHandler.html?is-external=true" rel="nofollow" target="_blank">ContentHandler</a> handler, <a href="https://tika.apache.org/1.6/api/org/apache/tika/metadata/Metadata.html" rel="nofollow" target="_blank">Metadata</a> metadata, <a href="https://tika.apache.org/1.6/api/org/apache/tika/parser/ParseContext.html" rel="nofollow" target="_blank">ParseContext</a> context)

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

Sr.No. 对象和描述
1

InputStream stream

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

2

ContentHandler handler

Tika将文档作为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. 类和描述
1

BodyContentHandler

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

2

LinkContentHandler

此类检测并选取XHTML文档的所有H-Ref标记,并转发这些标记以供Web爬虫等工具使用。

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 iowiki

如果你执行上面的程序,它会给你以下输出 -

File content : Hi students welcome to iowiki

TIKA - Metadata Extraction

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

XMP标准

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

物业类

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

元数据类

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

元数据名称

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

String[] metadaNames = metadata.names();
String value = metadata.get(name);

使用Parse方法提取元数据

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

JPG

如果你执行上面的程序,它会给你以下输出 -

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

我们还可以获得所需的元数据值。

添加新的元数据值

我们可以使用元数据类的add()方法添加新的元数据值。 下面给出了此方法的语法。 这里我们添加作者姓名。

metadata.add(“author”,”IOWIKI”); 

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","IOWIKI");
      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 iowiki

如果你执行上面的程序,它会给你以下输出 -

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: 
IOWIKI 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()方法设置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 iowiki

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

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

需要语言检测

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

分析语料库的算法

什么是语料库?

为了检测文档的语言,构造语言简档并与已知语言的简档进行比较。 这些已知语言的文本集称为corpus

语料库是一种书面语言文本的集合,用于解释语言在实际情况下的使用方式。

语料库是从书籍,成绩单和其他数据资源(如Internet)开发的。 语料库的准确性取决于我们用于构建语料库的分析算法。

什么是分析算法?

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

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

使用Word集作为语料库

使用单词集,构造一个简单的算法来找到两个语料库之间的距离,这将等于匹配单词的频率之间的差异之和。

这些算法存在以下问题 -

  • 由于匹配单词的频率非常低,因此该算法不能有效地处理具有少量句子的小文本。 它需要大量文本才能准确匹配。

  • 它不能检测具有复合句的语言的单词边界,以及没有单词分隔符的单词边界,如空格或标点符号。

由于使用单词集作为语料库的这些困难,考虑了单个字符或字符组。

使用字符集作为语料库

由于语言中常用的字符数量有限,因此很容易应用基于字频而不是字符的算法。 对于在一种或几种语言中使用的某些字符集,该算法甚至更好地工作。

该算法存在以下缺点 -

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

  • 没有特定的工具或算法可以借助(作为语料库)多种语言使用的字符集来专门识别语言。

N-gram Algorithm

上述缺点产生了一种使用给定长度的字符序列来分析语料库的新方法。 这种字符序列通常称为N-gram,其中N表示字符序列的长度。

  • N-gram算法是一种有效的语言检测方法,特别是在欧洲语言如英语的情况下。

  • 该算法适用于短文本。

  • 虽然有高级语言分析算法可以在具有更多吸引人功能的多语言文档中检测多种语言,但Tika使用3-gram算法,因为它适用于大多数实际情况。

Tika中的语言检测

在ISO 639-1标准化的所有184种标准语言中,Tika可以检测18种语言。 Tika中的语言检测是使用LanguageIdentifier类的getLanguage()方法完成的。 此方法以String格式返回语言的代码名称。 以下是Tika检测到的18种语言代码对的列表 -

da—Danishde—Germanet—Estonianel—Greek
en—Englishes—Spanishfi—Finnishfr—French
hu—Hungarianis—Icelandicit—Italiannl—Dutch
no—Norwegianpl—Polishpt—Portugueseru—Russian
sv—Swedishth—Thai

在实例化LanguageIdentifier类时,应传递要提取的内容的String格式或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 

如果你执行上面的程序,它给出了以下outpu-

Language of the given content is : en

文档的语言检测

要检测给定文档的语言,必须使用parse()方法对其进行解析。 parse()方法解析内容并将其存储在处理程序对象中,该对象作为参数之一传递给它。 将处理程序对象的String格式传递给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 iowiki

如果你执行上面的程序,它会给你以下输出 -

Language name :en

与Tika jar一起,Tika提供了图形用户界面应用程序(GUI)和命令行界面(CLI)应用程序。 您可以像其他Java应用程序一样从命令提示符执行Tika应用程序。

TIKA - GUI

Graphical User Interface (GUI)

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

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

  • 解压缩源代码zip文件夹,打开tika-app文件夹。

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

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

打开窗户

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

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

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示例

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

PDF示例1

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

Output -

<b class="notranslate">Contents of the PDF:</b>
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.
<b class="notranslate">Metadata of the PDF:</b>
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

以下是从Open Office Document Format(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文件的快照。

介绍

本文档具有以下属性 -

例题

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

Output -

<b class="notranslate">Contents of the document:</b>
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. 
<b class="notranslate">Metadata of the document:</b>
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 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.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文件。

通过Excel

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

Excel属性

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

Output -

<b class="notranslate">Contents of the document:</b>
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
<b class="notranslate">Metadata of the document:</b>
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文件的快照 -

简单文件

文本文档具有以下属性 -

文档属性

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

Output -

<b class="notranslate">Contents of the document:</b>
At iowiki.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 IOWIKI (I) Pvt. Ltd. He came up with the website iowiki.com 
in year 2006 with the help of handpicked freelancers, with an array of tutorials for 
computer programming languages.
<b class="notranslate">Metadata of the document:</b>
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文件的快照。

例

HTML文档具有以下属性 -

文件属性1

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

Output -

<b class="notranslate">Contents of the document:</b>
	Name	                     Salary	    age
	Ramesh Raman	             50000	    20
	Shabbir Hussein	             70000          25
	Umesh Raman	             50000	    30
	Somesh	                     50000	    35
<b class="notranslate">Metadata of the document:</b>
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文档

本文档具有以下属性 -

XML Document1

如果你执行上面的程序,它会给你以下输出 -

Output -

<b class="notranslate">Contents of the document:</b>
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
<b class="notranslate">Metadata of the document:</b>
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.java的快照,它将在编译后生成Example.class。

JAVA Excel

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

示例类

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

Output -

<b class="notranslate">Contents of the document:</b>
package iowiki.tika.examples;
public synchronized class Example {
   public void Example();
   public static void main(String[]);
}
<b class="notranslate">Metadata of the document:</b>
title: Example
resourceName: Example.class
dc:title: Example

TIKA - Extracting JAR File

以下是从Java Archive(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示例

jar文件具有以下属性 -

JAR示例

执行上述程序后,它会给你以下输出 -

Output -

<b class="notranslate">Contents of the document:</b>
META-INF/MANIFEST.MF
iowiki/tika/examples/Example.class
<b class="notranslate">Metadata of the document:</b>
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的快照 -

宝宝

JPEG文件具有以下属性 -

属性

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

Output −

<b class="notranslate">Contents of the document:</b>
<b class="notranslate">Meta data of the document:</b>
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文件属性的快照。

通过MP4

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

Output -

<b class="notranslate">Contents of the document:</b>
<b class="notranslate">Metadata of the document:</b>
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文件具有以下属性 -

示例MP3

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

Output -

<b class="notranslate">Contents of the document:</b>
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
<b class="notranslate">Metadata of the document:</b>
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
↑回到顶部↑
WIKI教程 @2018