Tika-quick-guide

提供:Dev Guides
移動先:案内検索

TIKA-概要

Apache Tikaとは何ですか?

  • Apache Tikaは、さまざまなファイル形式からのドキュメントタイプの検出とコンテンツ抽出に使用されるライブラリです。
  • 内部的に、Tikaは既存のさまざまなドキュメントパーサーとドキュメントタイプ検出技術を使用して、データを検出および抽出します。
  • Tikaを使用すると、構造化されたテキストと、スプレッドシート、テキストドキュメント、画像、PDF、さらにはマルチメディア入力形式などのさまざまなタイプのドキュメントからメタデータの両方をある程度抽出するユニバーサルタイプ検出器とコンテンツエクストラクターを開発できます。
  • Tikaは、さまざまなファイル形式を解析するための単一の汎用APIを提供します。 各ドキュメントタイプに既存の専用パーサーライブラリを使用します。
  • これらのパーサーライブラリはすべて、* Parserインターフェイス*と呼ばれる単一のインターフェイスの下にカプセル化されます。

Appache Tika

なぜティカ?

filext.comによると、約15k〜51kのコンテンツタイプがあり、この数は日々増加しています。 データは、テキストドキュメント、Excelスプレッドシート、PDF、画像、マルチメディアファイルなど、さまざまな形式で保存されています。 したがって、検索エンジンやコンテンツ管理システムなどのアプリケーションには、これらのドキュメントタイプからデータを簡単に抽出するための追加サポートが必要です。 Apache Tikaは、複数のファイル形式からデータを見つけて抽出するための汎用APIを提供することにより、この目的に役立ちます。

Apache Tikaアプリケーション

Apache Tikaを利用するさまざまなアプリケーションがあります。 ここでは、Apache Tikaに大きく依存するいくつかの著名なアプリケーションについて説明します。

サーチエンジン

Tikaは、デジタルドキュメントのテキストコンテンツのインデックスを作成する検索エンジンの開発中に広く使用されています。

  • 検索エンジンは、Webから情報とインデックス付きドキュメントを検索するように設計された情報処理システムです。
  • クローラーは、Webをクロールして、何らかのインデックス手法を使用してインデックスを作成するドキュメントを取得する検索エンジンの重要なコンポーネントです。 その後、クローラはこれらのインデックス付きドキュメントを抽出コンポーネントに転送します。
  • 抽出コンポーネントの役割は、ドキュメントからテキストとメタデータを抽出することです。 このような抽出されたコンテンツとメタデータは、検索エンジンに非常に役立ちます。 この抽出コンポーネントにはTikaが含まれています。
  • 抽出されたコンテンツは、それを使用して検索インデックスを作成する検索エンジンのインデクサーに渡されます。 これとは別に、検索エンジンは抽出されたコンテンツを他の多くの方法でも使用します。

検索エンジン

文書分析

  • 人工知能の分野では、セマンティックレベルでドキュメントを自動的に分析し、そこからあらゆる種類のデータを抽出する特定のツールがあります。
  • そのようなアプリケーションでは、ドキュメントは、ドキュメントの抽出されたコンテンツ内の顕著な用語に基づいて分類されます。
  • これらのツールは、Tikaを使用してコンテンツを抽出し、プレーンテキストからデジタルドキュメントまでさまざまなドキュメントを分析します。

デジタル資産管理

  • 一部の組織では、デジタル資産管理(DAM)と呼ばれる特別なアプリケーションを使用して、写真、電子書籍、図面、音楽、ビデオなどのデジタル資産を管理しています。
  • このようなアプリケーションは、ドキュメントタイプ検出器とメタデータ抽出機能を利用して、さまざまなドキュメントを分類します。

内容分析

  • Amazonのようなウェブサイトは、関心に応じて個々のユーザーに新しくリリースされたコンテンツを推奨しています。 そのためには、これらのWebサイトは*機械学習の手法*に従うか、FacebookなどのソーシャルメディアWebサイトの助けを借りて、ユーザーの好きなものや興味などの必要な情報を抽出します。 この収集された情報は、htmlタグまたはその他のコンテンツタイプの検出と抽出が必要なその他の形式の形式になります。
  • ドキュメントのコンテンツ分析には、 UIMAMahout などの機械学習技術を実装するテクノロジーがあります。 これらのテクノロジーは、ドキュメント内のデータのクラスタリングと分析に役立ちます。
  • Apache Mahout は、クラウドコンピューティングプラットフォームであるApache HadoopでMLアルゴリズムを提供するフレームワークです。 Mahoutは、特定のクラスタリングおよびフィルタリング手法に従ってアーキテクチャを提供します。 このアーキテクチャに従うことにより、プログラマは独自のMLアルゴリズムを記述して、さまざまなテキストとメタデータの組み合わせを使用して推奨事項を作成できます。 これらのアルゴリズムに入力を提供するために、Mahoutの最新バージョンはTikaを使用して、バイナリコンテンツからテキストとメタデータを抽出します。
  • Apache UIMA は、さまざまなプログラミング言語を分析および処理し、UIMAアノテーションを生成します。 内部的には、Tika Annotatorを使用してドキュメントテキストとメタデータを抽出します。

歴史

Year Development
2006 The idea of Tika was projected before the Lucene Project Management Committee.
2006 The concept of Tika and its usefulness in the Jackrabbit project was discussed.
2007 Tika entered into Apache incubator.
2008 Versions 0.1 and 0.2 were released and Tika graduated from the incubator to the Lucene sub-project.
2009 Versions 0.3, 0.4, and 0.5 were released.
2010 Version 0.6 and 0.7 were released and Tika graduated into the top-level Apache project.
2011 Tika 1.0 was released and the book on Tika "Tika in Action” was also released in the same year.

TIKA-アーキテクチャ

Tikaのアプリケーションレベルのアーキテクチャ

アプリケーションプログラマは、アプリケーションにTikaを簡単に統合できます。 Tikaは、コマンドラインインターフェイスとGUIを提供して、使いやすくしています。

この章では、Tikaアーキテクチャを構成する4つの重要なモジュールについて説明します。 次の図は、Tikaのアーキテクチャとその4つのモジュールを示しています-

  • 言語検出メカニズム。
  • MIME検出メカニズム。
  • パーサーインターフェイス。
  • ティカファサードクラス。

Tika Architecture

言語検出メカニズム

テキスト文書がTikaに渡されるたびに、文書が書かれた言語が検出されます。 言語注釈のないドキュメントを受け入れ、言語を検出することでその情報をドキュメントのメタデータに追加します。

言語識別をサポートするために、Tikaにはパッケージ org.apache.tika.languageLanguage Identifier というクラスがあり、内部に特定のテキストから言語を検出するアルゴリズムを含む言語識別リポジトリがあります。 Tikaは、言語検出に内部的にN-gramアルゴリズムを使用しています。

MIME検出メカニズム

Tikaは、MIME標準に従ってドキュメントタイプを検出できます。 TikaのデフォルトのMIMEタイプの検出は、https://tika.apache.org/1.4/api/org/apache/tika/mime/MimeTypesl [org.apache.tika.mime.mimeTypes]を使用して行われます。 ほとんどのコンテンツタイプの検出には、https://tika.apache.org/1.4/api/org/apache/tika/detect/Detectorl [org.apache.tika.detect.Detector]インターフェースを使用します。

内部的にTikaは、ファイルグロブ、コンテンツタイプヒント、マジックバイト、文字エンコーディング、およびその他のいくつかのテクニックのようないくつかのテクニックを使用します。

パーサーインターフェイス

org.apache.tika.parserのパーサーインターフェイスは、Tikaでドキュメントを解析するための重要なインターフェイスです。 このインターフェイスは、ドキュメントからテキストとメタデータを抽出し、パーサープラグインを作成する外部ユーザー向けに要約します。

Tikaは、個々のドキュメントタイプに固有のさまざまな具体的なパーサークラスを使用して、多くのドキュメント形式をサポートしています。 これらの形式固有のクラスは、パーサーロジックを直接実装するか、外部パーサーライブラリを使用することにより、さまざまなドキュメント形式をサポートします。

ティカファサードクラス

Tikaファサードクラスを使用することは、JavaからTikaを呼び出す最も簡単で直接的な方法であり、ファサードデザインパターンに従います。 Tikaファサードクラスは、Tika APIのorg.apache.tikaパッケージにあります。

基本的なユースケースを実装することにより、Tikaはランドスケープの仲介者として機能します。 MIME検出メカニズム、パーサーインターフェイス、言語検出メカニズムなど、Tikaライブラリの基礎となる複雑さを抽象化し、ユーザーに使用するシンプルなインターフェイスを提供します。

ティカの特徴

  • 統合されたパーサーインターフェイス-Tikaはすべてのサードパーティのパーサーライブラリを単一のパーサーインターフェイス内にカプセル化します。 この機能により、ユーザーは適切なパーサーライブラリを選択する負担から逃れ、発生したファイルの種類に応じてそれを使用します。
  • 低メモリ使用量-Tikaはより少ないメモリリソースを消費するため、Javaアプリケーションに簡単に組み込むことができます。 また、モバイルPDAなどのリソースの少ないプラットフォームで実行されるアプリケーション内でTikaを使用することもできます。
  • 高速処理-アプリケーションからの迅速なコンテンツ検出と抽出が期待できます。
  • 柔軟なメタデータ-Tikaは、ファイルの記述に使用されるすべてのメタデータモデルを理解します。
  • パーサーの統合-Tikaは、単一のアプリケーションの各ドキュメントタイプで利用可能なさまざまなパーサーライブラリを使用できます。
  • * MIMEタイプの検出*-Tikaは、MIME標準に含まれるすべてのメディアタイプからコンテンツを検出および抽出できます。
  • 言語検出-Tikaには言語識別機能が含まれているため、多言語Webサイトの言語タイプに基づいたドキュメントで使用できます。

Tikaの機能

ティカはさまざまな機能をサポートしています-

  • 文書タイプの検出
  • コンテンツ抽出
  • メタデータ抽出
  • 言語検出

文書タイプの検出

Tikaはさまざまな検出手法を使用して、与えられたドキュメントの種類を検出します。

検出

コンテンツ抽出

Tikaには、さまざまなドキュメント形式のコンテンツを解析して抽出できるパーサーライブラリがあります。 ドキュメントのタイプを検出した後、パーサーリポジトリから適切なパーサーを選択し、ドキュメントを渡します。 Tikaの異なるクラスには、異なるドキュメント形式を解析するメソッドがあります。

抽出

メタデータ抽出

コンテンツに加えて、Tikaはコンテンツ抽出と同じ手順でドキュメントのメタデータを抽出します。 一部のドキュメントタイプでは、Tikaにはメタデータを抽出するクラスがあります。

Extraction1

言語検出

内部的に、Tikaは n-gram などのアルゴリズムに従って、指定されたドキュメントのコンテンツの言語を検出します。 Tikaは、言語識別のために LanguageidentifierProfiler などのクラスに依存しています。

Detection1

TIKA-環境

この章では、WindowsおよびLinuxでApache Tikaをセットアップするプロセスについて説明します。 Apache Tikaのインストール中にユーザー管理が必要です。

システム要求

JDK Java SE 2 JDK 1.6 or above
Memory 1 GB RAM (recommeneded)
Disk Space No minimum requirement
Operating System Version Windows XP or above, Linux

ステップ1:Javaインストールの検証

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(TM)SEランタイム環境(ビルド1.7.0_60-b19)

Java Hotspot(TM)64ビットサーバーVM(ビルド24.60-b09、混合モード)

Lunix

java version "1.7.0_25"

JDKランタイム環境を開く(rhel-2.3.10.4.el6_4-x86_64)

JDK 64ビットサーバーVMを開く(ビルド23.7-b01、混合モード)

  • このチュートリアルの読者は、このチュートリアルに進む前に、システムにJava 1.7.0_60がインストールされていると想定しています。
  • Java SDKがない場合は、https://www.oracle.com/technetwork/java/javase/downloads/indexl [[[1]] downloads/indexlおよびそれをインストールしてください]。

ステップ2:Java環境の設定

Javaがマシンにインストールされているベースディレクトリの場所を指すようにJAVA_HOME環境変数を設定します。 例えば、

OS Output
Windows Set Environmental variable JAVA_HOME to C:\ProgramFiles\java\jdk1.7.0_60
Linux export JAVA_HOME =/usr/local/java-current

Javaコンパイラの場所の完全パスをシステムパスに追加します。

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

上記で説明したように、コマンドプロンプトからjava-versionコマンドを確認します。

ステップ3:Apache Tika環境のセットアップ

プログラマーは、環境を使用してApache Tikaを統合できます。

  • コマンドライン、
  • Tika API、
  • Tikaのコマンドラインインターフェイス(CLI)、
  • Tikaのグラフィカルユーザーインターフェイス(GUI)、または
  • ソースコード。

これらのアプローチのいずれについても、まず、Tikaのソースコードをダウンロードする必要があります。

Tikaのソースコードはhttps://tika.apache.org/downloadl[https://Tika.apache.org/downloadl]にあり、2つのリンクがあります-

  • apache-tika-1.6-src.zip -Tikaのソースコードが含まれています。
  • Tika -app-1.6.jar -Tikaアプリケーションを含むjarファイルです。

これら2つのファイルをダウンロードします。 ティカの公式ウェブサイトのスナップショットを以下に示します。

ティカ環境

ファイルをダウンロードしたら、jarファイル tika-app-1.6.jar のクラスパスを設定します。 次の表に示すように、jarファイルの完全なパスを追加します。

OS Output
Windows Append the String “C:\jars\Tika-app-1.6.jar” to the user environment variable CLASSPATH
Linux

Export CLASSPATH = $CLASSPATH −

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

Apacheは、Eclipseを使用したグラフィカルユーザーインターフェイス(GUI)アプリケーションであるTikaアプリケーションを提供します。

Eclipseを使用したTika-Mavenビルド

  • Eclipseを開き、新しいプロジェクトを作成します。
  • EclipseにMavenがない場合は、所定の手順に従ってセットアップしてください。
  • link https://wiki.eclipse.org/M2E_updatesite_and_gittagsを開きます。 そこには、表形式のm2eプラグインリリースがあります。

m2eリリース

  • 最新バージョンを選択し、p2 url列にURLのパスを保存します。
  • 次に、Eclipseを再訪し、メニューバーで[ヘルプ]をクリックし、ドロップダウンメニューから[新しいソフトウェアのインストール]を選択します。

Eclipse

  • [追加]ボタンをクリックし、必要に応じて任意の名前を入力します。 保存したURLを Location フィールドに貼り付けます。
  • 前の手順で選択した名前の新しいプラグインが追加され、その前のチェックボックスをオンにして、[次へ]をクリックします。

インストール

  • インストールを続行します。 完了したら、Eclipseを再起動します。
  • プロジェクトを右クリックし、 configure オプションで、 convert to maven project を選択します。
  • 新しいPOMを作成するための新しいウィザードが表示されます。 グループIDとしてorg.apache.tikaを入力し、Tikaの最新バージョンを入力し、 packaging をjarとして選択し、 Finish をクリックします。

Mavenプロジェクトが正常にインストールされ、プロジェクトがMavenに変換されます。 次に、pom.xmlファイルを構成する必要があります。

XMLファイルを構成する

[[2]] 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-参照API

ユーザーは、Tikaファサードクラスを使用してアプリケーションにTikaを埋め込むことができます。 Tikaのすべての機能を調べる方法があります。 Tikaはファサードクラスであるため、その機能の背後にある複雑さを抽象化します。 これに加えて、ユーザーはアプリケーションでTikaのさまざまなクラスを使用することもできます。

ユーザーアプリケーション

ティカクラス(ファサード)

これは、Tikaライブラリの最も顕著なクラスであり、ファサードのデザインパターンに従います。 したがって、すべての内部実装を抽象化し、Tika機能にアクセスする簡単なメソッドを提供します。 次の表に、このクラスのコンストラクターとその説明を示します。

パッケージ-org.apache.tika

クラス-ティカ

Sr.No. Constructor & Description
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ファサードを作成します。

メソッドと説明

以下は、ティカファサードクラスの重要な方法です-

Sr.No. Methods & Description
1

parseToString (*File *file)

このメソッドとそのすべてのバリアントは、パラメーターとして渡されたファイルを解析し、抽出されたテキストコンテンツを文字列形式で返します。 デフォルトでは、この文字列パラメーターの長さは制限されています。

2

int* getMaxStringLength *()

parseToStringメソッドによって返される文字列の最大長を返します。

3

void* setMaxStringLength *(int maxStringLength)

parseToStringメソッドによって返される文字列の最大長を設定します。

4

Reader* parse* (*File *file)

このメソッドとそのすべてのバリアントは、パラメーターとして渡されたファイルを解析し、抽出されたテキストコンテンツをjava.io.readerオブジェクトの形式で返します。

5

String* detect* (InputStream *stream, Metadata *metadata)

このメソッドとそのすべてのバリアントは、InputStreamオブジェクトとMetadataオブジェクトをパラメーターとして受け取り、指定されたドキュメントのタイプを検出し、ドキュメントタイプ名をStringオブジェクトとして返します。 このメソッドは、Tikaが使用する検出メカニズムを抽象化します。

6

String* translate* (InputStream *text, String* targetLanguage)

このメソッドとそのすべてのバリアントは、テキストを翻訳する言語を表すInputStreamオブジェクトとStringを受け入れ、指定されたテキストを目的の言語に翻訳して、ソース言語の自動検出を試みます。

パーサーインターフェイス

これは、Tikaパッケージのすべてのパーサークラスによって実装されるインターフェイスです。

パッケージ-org.apache.tika.parser

インターフェース-パーサー

メソッドと説明

以下は、ティカパーサーインターフェイスの重要な方法です-

Sr.No. Methods & Description
1

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

このメソッドは、指定されたドキュメントをXHTMLおよびSAXイベントのシーケンスに解析します。 解析後、抽出されたドキュメントコンテンツをContentHandlerクラスのオブジェクトに配置し、メタデータをMetadataクラスのオブジェクトに配置します。

メタデータクラス

このクラスは、CreativeCommons、Geographic、HttpHeaders、Message、MSOffice、ClimateForcast、TIFF、TikaMetadataKeys、TikaMimeKeys、Serializableなどのさまざまなインターフェイスを実装して、さまざまなデータモデルをサポートします。 次の表に、このクラスのコンストラクターとメソッドとその説明を示します。

パッケージ-org.apache.tika.metadata

*class* -メタデータ
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)

メタデータプロパティに複数の値を設定します。

言語識別子クラス

このクラスは、指定されたコンテンツの言語を識別します。 次の表に、このクラスのコンストラクターとその説明を示します。

パッケージ-org.apache.tika.language

*class* -言語識別子
Sr.No. Constructor & Description
1

LanguageIdentifier (LanguageProfile profile)

言語識別子をインスタンス化します。 ここでは、LanguageProfileオブジェクトをパラメーターとして渡す必要があります。

2

LanguageIdentifier (String content)

このコンストラクタは、テキストコンテンツから文字列を渡すことにより、言語識別子をインスタンス化できます。

Sr.No. Methods & Description
1

String getLanguage ()

現在のLanguageIdentifierオブジェクトに指定された言語を返します。

TIKA-ファイル形式

Tikaがサポートするファイル形式

次の表に、Tikaがサポートするファイル形式を示します。

File format Package Library Class in Tika
XML org.apache.tika.parser.xml XMLParser
HTML org.apache.tika.parserl and it uses Tagsoup Library HtmlParser
MS-Office compound document Ole2 till 2007 ooxml 2007 onwards

org.apache.tika.parser.microsoft

org.apache.tika.parser.microsoft.ooxmlおよびApache Poiライブラリを使用

a

OfficeParser(ole2)

OOXMLParser(ooxml)

OpenDocument Format openoffice org.apache.tika.parser.odf OpenOfficeParser
portable Document Format(PDF) org.apache.tika.parser.pdf and this package uses Apache PdfBox library PDFParser
Electronic Publication Format (digital books) org.apache.tika.parser.epub EpubParser
Rich Text format org.apache.tika.parser.rtf RTFParser
Compression and packaging formats org.apache.tika.parser.pkg and this package uses Common compress library PackageParser and CompressorParser and its sub-classes
Text format org.apache.tika.parser.txt TXTParser
Feed and syndication formats org.apache.tika.parser.feed FeedParser
Audio formats org.apache.tika.parser.audio and org.apache.tika.parser.mp3 AudioParser MidiParser Mp3- for mp3parser
Imageparsers org.apache.tika.parser.jpeg JpegParser-for jpeg images
Videoformats org.apache.tika.parser.mp4 and org.apache.tika.parser.video this parser internally uses Simple Algorithm to parse flash video formats Mp4parser FlvParser
java class files and jar files org.apache.tika.parser.asm ClassParser CompressorParser
Mobxformat (email messages) org.apache.tika.parser.mbox MobXParser
Cad formats org.apache.tika.parser.dwg DWGParser
FontFormats org.apache.tika.parser.font TrueTypeParser
executable programs and libraries org.apache.tika.parser.executable ExecutableParser

TIKA-文書タイプの検出

MIME標準

多目的インターネットメール拡張機能(MIME)標準は、ドキュメントの種類を識別するための利用可能な最高の標準です。 これらの標準の知識は、内部のやり取り中にブラウザーを支援します。

ブラウザがメディアファイルを検出すると、ブラウザで使用可能な互換性のあるソフトウェアを選択して、コンテンツを表示します。 特定のメディアファイルを実行するための適切なアプリケーションがない場合は、適切なプラグインソフトウェアを入手することをユーザーに推奨します。

Tikaでの型検出

Tikaは、MIMEで提供されるすべてのインターネットメディアドキュメントタイプをサポートしています。 ファイルがTikaを通過するたびに、ファイルとそのドキュメントタイプが検出されます。 メディアタイプを検出するために、Tikaは以下のメカニズムを内部的に使用します。

ファイル拡張子

ファイル拡張子の確認は、ファイルの形式を検出するための最も単純で最も広く使用されている方法です。 多くのアプリケーションとオペレーティングシステムは、これらの拡張機能をサポートしています。 以下に、いくつかの既知のファイルタイプの拡張子を示します。

File name Extention
image .jpg
audio .mp3
java archive file .jar
java class file .class

コンテンツタイプのヒント

データベースからファイルを取得するか、別のドキュメントに添付すると、ファイルの名前または拡張子が失われる可能性があります。 このような場合、ファイルとともに提供されるメタデータは、ファイル拡張子の検出に使用されます。

マジックバイト

ファイルの生のバイトを観察すると、各ファイルのいくつかのユニークな文字パターンを見つけることができます。 一部のファイルには、*マジックバイト*と呼ばれる特別なバイトプレフィックスがあります。これは、ファイルタイプを識別するために特別に作成され、ファイルに含まれます。

たとえば、JavaファイルにはCA FE BA BE(16進形式)、pdfファイルには%PDF(ASCII形式)があります。 Tikaはこの情報を使用して、ファイルのメディアタイプを識別します。

文字エンコーディング

プレーンテキストを含むファイルは、さまざまな種類の文字エンコードを使用してエンコードされます。 ここでの主な課題は、ファイルで使用されている文字エンコーディングの種類を識別することです。 Tikaは、* Bomマーカー*や Byte Frequencies などの文字エンコード技術に従って、プレーンテキストコンテンツで使用されるエンコードシステムを識別します。

XMLルート文字

XMLドキュメントを検出するために、Tikaはxmlドキュメントを解析し、ルート要素、名前空間、参照されたスキーマなどの情報を抽出します。そこからファイルの真のメディアタイプが見つかります。

Facadeクラスを使用したタイプ検出

ファサードクラスの* detect()*メソッドは、ドキュメントタイプを検出するために使用されます。 このメソッドは、入力としてファイルを受け入れます。 以下に示すのは、Tikaファサードクラスを使用したドキュメントタイプ検出のプログラム例です。

import java.io.File;

import org.apache.tika.Tika;

public class Typedetection {

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

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

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

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

上記のコードをTypeDetection.javaとして保存し、次のコマンドを使用してコマンドプロンプトから実行します-

javac TypeDetection.java
java TypeDetection

audio/mpeg

TIKA-コンテンツ抽出

Tikaはさまざまなパーサーライブラリを使用して、指定されたパーサーからコンテンツを抽出します。 指定されたドキュメントタイプを抽出するための適切なパーサーを選択します。

ドキュメントの解析には、通常、TikaファサードクラスのparseToString()メソッドが使用されます。 解析プロセスに含まれるステップを以下に示します。これらのステップは、Tika ParsertoString()メソッドによって抽象化されます。

解析プロセス

解析プロセスの抽象化-

  • 最初にドキュメントをTikaに渡すと、ドキュメントで使用可能な適切なタイプ検出メカニズムが使用され、ドキュメントタイプが検出されます。
  • ドキュメントタイプがわかると、パーサーリポジトリから適切なパーサーを選択します。 パーサーリポジトリには、外部ライブラリを使用するクラスが含まれています。
  • 次に、ドキュメントを渡して、コンテンツを解析し、テキストを抽出し、読み取り不可能な形式の例外をスローするパーサーを選択します。

Tikaを使用したコンテンツ抽出

以下は、ティカのファサードクラスを使用してファイルからテキストを抽出するためのプログラムです-

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 finddevguides

それはあなたに次の出力を提供します-

Extracted Content: Hi students welcome to finddevguides

パーサーインターフェイスを使用したコンテンツの抽出

Tikaのパーサーパッケージは、テキストドキュメントを解析できるいくつかのインターフェイスとクラスを提供します。 以下は、 org.apache.tika.parser パッケージのブロック図です。

パーサーインターフェイス

pdfパーサー、Mp3Passer、OfficeParserなど、利用可能ないくつかのパーサークラスがあり、それぞれのドキュメントを個別に解析します。 これらのクラスはすべて、パーサーインターフェイスを実装しています。

CompositeParser

指定された図は、Tikaの汎用パーサークラス: CompositeParser および AutoDetectParser を示しています。 CompositeParserクラスは複合デザインパターンに従うため、パーサーインスタンスのグループを単一のパーサーとして使用できます。 CompositeParserクラスは、パーサーインターフェイスを実装するすべてのクラスへのアクセスも許可します。

AutoDetectParser

これはCompositeParserのサブクラスであり、自動タイプ検出を提供します。 AutoDetectParserは、この機能を使用して、コンポジット手法を使用して、着信ドキュメントを適切なパーサークラスに自動的に送信します。

parse()メソッド

parseToString()と共に、パーサーインターフェイスのparse()メソッドも使用できます。 このメソッドのプロトタイプを以下に示します。

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

次の表に、パラメーターとして受け入れる4つのオブジェクトを示します。

Sr.No. Object & Description
1

InputStream stream

ファイルのコンテンツを含むすべてのInputstreamオブジェクト

2

ContentHandler handler

TikaはドキュメントをXHTMLコンテンツとしてこのハンドラーに渡し、その後、ドキュメントはSAX APIを使用して処理されます。 ドキュメント内のコンテンツの効率的な後処理を提供します。

3

Metadata metadata

メタデータオブジェクトは、ドキュメントメタデータのソースとターゲットの両方として使用されます。

4

ParseContext context

このオブジェクトは、クライアントアプリケーションが解析プロセスをカスタマイズする場合に使用されます。

以下に、parse()メソッドの使用方法を示す例を示します。

  • ステップ1 *-

パーサーインターフェイスのparse()メソッドを使用するには、このインターフェイスの実装を提供するクラスをインスタンス化します。

PDFParser、OfficeParser、XMLParserなどの個別のパーサークラスがあります。 これらの個々のドキュメントパーサーを使用できます。 または、CompositeParserまたはAutoDetectParserを使用して、すべてのパーサークラスを内部で使用し、適切なパーサーを使用してドキュメントの内容を抽出できます。

Parser parser = new AutoDetectParser();
   (or)
Parser parser = new CompositeParser();
   (or)
object of any individual parsers given in Tika Library
  • ステップ2 *-

ハンドラークラスオブジェクトを作成します。 以下に3つのコンテンツハンドラがあります-

Sr.No. Class & Description
1

BodyContentHandler

このクラスは、XHTML出力の本文部分を選択し、そのコンテンツを出力ライターまたは出力ストリームに書き込みます。 次に、XHTMLコンテンツを別のコンテンツハンドラインスタンスにリダイレクトします。

2

LinkContentHandler

このクラスは、XHTMLドキュメントのすべてのH-Refタグを検出および選択し、Webクローラーなどのツールを使用するためにそれらを転送します。

3

TeeContentHandler

このクラスは、複数のツールを同時に使用するのに役立ちます。

私たちの目標は、ドキュメントからテキストコンテンツを抽出することなので、以下に示すようにBodyContentHandlerをインスタンス化します-

BodyContentHandler handler = new BodyContentHandler( );
  • ステップ3 *-

以下に示すように、メタデータオブジェクトを作成します-

Metadata metadata = new Metadata();
  • ステップ4 *-

入力ストリームオブジェクトのいずれかを作成し、そこに抽出する必要があるファイルを渡します。

FileInputstream

パラメーターとしてファイルパスを渡すことによってファイルオブジェクトをインスタンス化し、このオブジェクトをFileInputStreamクラスコンストラクターに渡します。

注意-ファイルオブジェクトに渡されるパスにスペースを含めることはできません。

これらの入力ストリームクラスの問題は、ランダムアクセス読み取りをサポートしていないことです。これは、一部のファイル形式を効率的に処理するために必要です。 この問題を解決するために、TikaはTikaInputStreamを提供しています。

File  file = new File(filepath)
FileInputStream inputstream = new FileInputStream(file);
   (or)
InputStream stream = TikaInputStream.get(new File(filename));
  • ステップ5 *-

以下に示すように、解析コンテキストオブジェクトを作成します-

ParseContext context =new ParseContext();
  • ステップ6 *-

以下のプロトタイプに示すように、パーサーオブジェクトをインスタンス化し、解析メソッドを呼び出し、必要なすべてのオブジェクトを渡します-

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 finddevguides

上記のプログラムを実行すると、次の出力が得られます-

File content : Hi students welcome to finddevguides

TIKA-メタデータ抽出

コンテンツの他に、Tikaはファイルからメタデータも抽出します。 メタデータは、ファイルとともに提供される追加情報に他なりません。 オーディオファイルを検討する場合、アーティスト名、アルバム名、タイトルはメタデータの下にあります。

XMP標準

Extensible Metadata Platform(XMP)は、ファイルのコンテンツに関連する情報を処理および保存するための標準です。 Adobe Systems Incによって作成されました。 XMPは、https://en.wikipedia.org/wiki/Metadata [metadata]の定義、作成、および処理のための標準を提供します。 この標準は、https://en.wikipedia.org/wiki/Portable_Document_Format [PDF]、https://en.wikipedia.org/wiki/JPEG [JPEG]、https://enなどのいくつかのファイル形式に埋め込むことができます。 .wikipedia.org/wiki/JPEG_2000 [JPEG]、https://en.wikipedia.org/wiki/Graphics_Interchange_Format [GIF]、https://en.wikipedia.org/wiki/Portable_Network_Graphics [jpg]、https://en.wikipedia.org/wiki/HTML[HTML]など。

プロパティクラス

TikaはPropertyクラスを使用してXMPプロパティ定義に従います。 PropertyTypeおよびhttps://tika.apache.org/1.6/api/org/apache/を提供しますtika/metadata/Property.ValueTypel [ValueType]列挙型は、メタデータの名前と値をキャプチャします。

メタデータクラス

このクラスは、https://tika.apache.org/1.6/api/org/apache/tika/metadata/ClimateForcastl [ClimateForcast]、CativeCommons、https://tika.apache.org/1.6/api/などのさまざまなインターフェースを実装します。 org/apache/tika/metadata/Geographicl [Geographic]、TIFFなど さまざまなメタデータモデルのサポートを提供します。 さらに、このクラスは、ファイルからコンテンツを抽出するためのさまざまなメソッドを提供します。

メタデータ名

メソッドhttps://tika.apache.org/1.6/api/org/apache/tika/metadata/Metadatal [names()]を使用して、ファイルのすべてのメタデータ名のリストをメタデータオブジェクトから抽出できます。 すべての名前を文字列配列として返します。 メタデータの名前を使用して、* get()*メソッドを使用して値を取得できます。 メタデータ名を受け取り、それに関連付けられた値を返します。

String[] metadaNames = metadata.names();

String value = metadata.get(name);

Parseメソッドを使用したメタデータの抽出

parse()を使用してファイルを解析するたびに、空のメタデータオブジェクトをパラメーターの1つとして渡します。 このメソッドは、指定されたファイルのメタデータ(そのファイルに含まれている場合)を抽出し、メタデータオブジェクトに配置します。 したがって、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”,”Tutorials point”);

Metadataクラスには、https://tika.apache.org/1.6/api/org/apache/tika/metadata/ClimateForcastl [ClimateForcast]、CativeCommons、https://tika.apacheなどのクラスから継承されたプロパティを含む事前定義されたプロパティがあります。 org/1.6/api/org/apache/tika/metadata/Geographicl [Geographic]など。さまざまなデータモデルをサポートします。 以下に示すのは、TIFFによって実装された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 finddevguides

上記のプログラムを実行すると、次の出力が得られます-

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]

既存のメタデータ要素への値の設定

set()メソッドを使用して、既存のメタデータ要素に値を設定できます。 set()メソッドを使用して日付プロパティを設定する構文は次のとおりです-

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 finddevguides

上記のプログラムを実行すると、次の出力が得られます。 出力では、新しく追加されたメタデータ要素を確認できます。

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-言語検出

言語検出の必要性

多言語Webサイトで作成された言語に基づいて文書を分類するには、言語検出ツールが必要です。 このツールは、言語注釈(メタデータ)のないドキュメントを受け入れ、言語を検出してドキュメントのメタデータにその情報を追加する必要があります。

コーパスをプロファイリングするためのアルゴリズム

コーパスとは何ですか?

文書の言語を検出するために、言語プロファイルが作成され、既知の言語のプロファイルと比較されます。 これらの既知の言語のテキストセットは、「コーパス」として知られています。

コーパスは、言語が実際の状況でどのように使用されるかを説明する、書かれた言語のテキストのコレクションです。

コーパスは、書籍、トランスクリプト、およびインターネットなどの他のデータリソースから開発されます。 コーパスの精度は、コーパスのフレーム化に使用するプロファイリングアルゴリズムに依存します。

プロファイリングアルゴリズムとは何ですか?

言語を検出する一般的な方法は、辞書を使用することです。 特定のテキストで使用される単語は、辞書にある単語と一致します。

言語で使用される一般的な単語のリストは、たとえば英語の記事 aanthe など、特定の言語を検出するための最も単純で効果的なコーパスになります。

コーパスとしての単語セットの使用

単語セットを使用して、単純なアルゴリズムがフレーム化され、2つのコーパス間の距離が検出されます。これは、一致する単語の頻度間の差の合計に等しくなります。

このようなアルゴリズムには、次の問題があります-

  • 一致する単語の頻度は非常に少ないため、アルゴリズムは、文が少ない小さなテキストでは効率的に機能しません。 正確に一致させるには、大量のテキストが必要です。
  • 複合文を含む言語、およびスペースや句読点などの単語区切り文字を持たない言語の単語境界を検出できません。

コーパスとして単語セットを使用する際のこれらの困難のために、個々の文字または文字グループが考慮されます。

コーパスとしての文字セットの使用

言語で一般的に使用される文字の数は有限であるため、文字ではなく単語の頻度に基づいたアルゴリズムを簡単に適用できます。 このアルゴリズムは、1つまたはごく少数の言語で使用されている特定の文字セットの場合にさらに効果的に機能します。

このアルゴリズムには、次の欠点があります-

  • 同様の文字頻度を持つ2つの言語を区別することは困難です。
  • 複数の言語で使用される文字セットを(コーパスとして)使用して特定の言語を特定するための特定のツールやアルゴリズムはありません。

N-gramアルゴリズム

上記の欠点により、コーパスのプロファイリングに特定の長さの文字シーケンスを使用する新しいアプローチが生まれました。 このような文字のシーケンスは、一般にN-gramと呼ばれます。Nは文字シーケンスの長さを表します。

  • N-gramアルゴリズムは、特に英語のようなヨーロッパ言語の場合、言語検出のための効果的なアプローチです。
  • このアルゴリズムは、短いテキストでも問題なく機能します。
  • より魅力的な機能を備えた多言語ドキュメントの複数の言語を検出するための高度な言語プロファイリングアルゴリズムがありますが、Tikaはほとんどの実用的な状況に適しているため、3グラムアルゴリズムを使用します。

Tikaの言語検出

ISO 639-1で標準化された184の標準言語すべての中で、Tikaは18の言語を検出できます。 Tikaの言語検出は、 LanguageIdentifier クラスの* getLanguage()*メソッドを使用して行われます。 このメソッドは、言語のコード名を文字列形式で返します。 以下は、ティカによって検出された18の言語コードペアのリストです-

da—Danish de—German et—Estonian el—Greek
en—English es—Spanish fi—Finnish fr—French
hu—Hungarian is—Icelandic it—Italian nl—Dutch
no—Norwegian pl—Polish pt—Portuguese ru—Russian
sv—Swedish th—Thai
*LanguageIdentifier* クラスをインスタンス化する際、抽出するコンテンツの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

上記のプログラムを実行すると、次の出力が得られます。

Language of the given content is : en

文書の言語検出

特定のドキュメントの言語を検出するには、parse()メソッドを使用してドキュメントを解析する必要があります。 parse()メソッドはコンテンツを解析し、それを引数の1つとして渡されたハンドラオブジェクトに保存します。 以下に示すように、 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 finddevguides

上記のプログラムを実行すると、次の出力が得られます-

Language name :en

Tika jarに加えて、Tikaはグラフィカルユーザーインターフェイスアプリケーション(GUI)とコマンドラインインターフェイス(CLI)アプリケーションを提供します。 他のJavaアプリケーションと同様に、コマンドプロンプトからTikaアプリケーションを実行できます。

TIKA-GUI

グラフィカルユーザーインターフェイス(GUI)

  • Tikaは、ソースファイルと共にjarファイルを次のリンクhttps://tika.apache.org/downloadl[[[3]]]で提供しています。
  • 両方のファイルをダウンロードし、jarファイルのクラスパスを設定します。
  • ソースコードのzipフォルダーを抽出し、tika-appフォルダーを開きます。
  • 「tika-1.6 \ tika-app \ src \ main \ java \ org \ apache \ Tika \ gui」の展開されたフォルダには、 ParsingTransferHandler.java および TikaGUI.java の2つのクラスファイルがあります。
  • 両方のクラスファイルをコンパイルし、TikaGUI.javaクラスファイルを実行すると、次のウィンドウが開きます。

ウィンドウを開く

Tika GUIの使用方法を見てみましょう。

GUIで、[開く]をクリックし、抽出するファイルを参照して選択するか、ウィンドウの空白にドラッグします。

Tikaはファイルのコンテンツを抽出し、5つの異なる形式で表示します。 メタデータ、フォーマットされたテキスト、プレーンテキスト、メインコンテンツ、構造化テキスト。 任意の形式を選択できます。

同様に、CLIクラスは「tika-1.6 \ tikaapp \ src \ main \ java \ org \ apache \ tika \ cli」フォルダーにもあります。

次の図は、ティカができることを示しています。 GUIに画像をドロップすると、Tikaはそのメタデータを抽出して表示します。

GUI