Tika-content-extraction

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

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