TIKA-コンテンツ抽出

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

ドキュメントの解析には、TikaファサードクラスのparseToString()メソッドが一般的に使用されます。以下に示すのは、解析プロセスに関連するステップであり、これらはTika ParsertoString()メソッドによって抽象化されています。

構文解析プロセスの抽象化-

  • 最初にドキュメントをTikaに渡すと、Tikaで使用可能な適切なタイプ検出メカニズムを使用して、ドキュメントタイプを検出します。

  • ドキュメントタイプがわかると、パーサーリポジトリから適切なパーサーを選択します。パーサーリポジトリには、外部ライブラリを利用するクラスが含まれています。

  • 次に、ドキュメントが渡されて、コンテンツを解析し、テキストを抽出し、読み取り不可能な形式の例外をスローするパーサーが選択されます。

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 tutorialspoint

次の出力が得られます-

Extracted Content: Hi students welcome to tutorialspoint

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

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つのオブジェクトを示します。

シニア番号 オブジェクトと説明
1

InputStream stream

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

2

ContentHandler handler

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

3

Metadata metadata

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

4

ParseContext context

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

以下に示すのは、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

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

シニア番号 クラスと説明
1

BodyContentHandler

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

2

LinkContentHandler

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

3

TeeContentHandler

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

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

BodyContentHandler handler = new BodyContentHandler( );

Step 3

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

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

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

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

以下に示すのは、パーサーインターフェイスを使用したコンテンツ抽出のプログラムです。

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

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

import org.xml.sax.SAXException;

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

      //Assume sample.txt is in your current directory
      File file = new File("sample.txt");
      
      //parse method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(file);
      ParseContext context = new ParseContext();
      
      //parsing the file
      parser.parse(inputstream, handler, metadata, context);
      System.out.println("File content : " + Handler.toString());
   }
}

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

javac  ParserExtraction.java 
java  ParserExtraction

以下はsample.txtの内容です

Hi students welcome to tutorialspoint

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

File content : Hi students welcome to tutorialspoint