TIKA - Inhaltsextraktion

Tika verwendet verschiedene Parser-Bibliotheken, um Inhalte aus bestimmten Parsern zu extrahieren. Es wird der richtige Parser zum Extrahieren des angegebenen Dokumenttyps ausgewählt.

Zum Parsen von Dokumenten wird im Allgemeinen die parseToString () -Methode der Tika-Fassadenklasse verwendet. Nachfolgend sind die Schritte aufgeführt, die am Parsing-Prozess beteiligt sind. Diese werden von der Tika ParsertoString () -Methode abstrahiert.

Den Analyseprozess abstrahieren -

  • Wenn wir ein Dokument an Tika übergeben, verwendet es zunächst einen geeigneten Typerkennungsmechanismus und erkennt den Dokumenttyp.

  • Sobald der Dokumenttyp bekannt ist, wählt er einen geeigneten Parser aus seinem Parser-Repository aus. Das Parser-Repository enthält Klassen, die externe Bibliotheken verwenden.

  • Anschließend wird das Dokument übergeben, um den Parser auszuwählen, der den Inhalt analysiert, den Text extrahiert und Ausnahmen für nicht lesbare Formate auslöst.

Inhaltsextraktion mit Tika

Im Folgenden finden Sie das Programm zum Extrahieren von Text aus einer Datei mithilfe der Tika-Fassadenklasse.

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);
   }		 
}

Speichern Sie den obigen Code als TikaExtraction.java und führen Sie ihn an der Eingabeaufforderung aus -

javac TikaExtraction.java 
java TikaExtraction

Unten ist der Inhalt von sample.txt angegeben.

Hi students welcome to tutorialspoint

Es gibt Ihnen die folgende Ausgabe -

Extracted Content: Hi students welcome to tutorialspoint

Inhaltsextraktion über die Parser-Oberfläche

Das Parser-Paket von Tika bietet mehrere Schnittstellen und Klassen, mit denen wir ein Textdokument analysieren können. Unten ist das Blockdiagramm derorg.apache.tika.parser Paket.

Es stehen mehrere Parser-Klassen zur Verfügung, z. B. PDF-Parser, Mp3Passer, OfficeParser usw., um die jeweiligen Dokumente einzeln zu analysieren. Alle diese Klassen implementieren die Parser-Schnittstelle.

CompositeParser

Das angegebene Diagramm zeigt Tikas allgemeine Parser-Klassen: CompositeParser und AutoDetectParser. Da die CompositeParser-Klasse einem zusammengesetzten Entwurfsmuster folgt, können Sie eine Gruppe von Parser-Instanzen als einzelnen Parser verwenden. Die CompositeParser-Klasse ermöglicht auch den Zugriff auf alle Klassen, die die Parser-Schnittstelle implementieren.

AutoDetectParser

Dies ist eine Unterklasse von CompositeParser und bietet eine automatische Typerkennung. Mit dieser Funktion sendet der AutoDetectParser die eingehenden Dokumente mithilfe der zusammengesetzten Methode automatisch an die entsprechenden Parser-Klassen.

parse () -Methode

Neben parseToString () können Sie auch die parse () -Methode der Parser-Schnittstelle verwenden. Der Prototyp dieser Methode ist unten dargestellt.

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

In der folgenden Tabelle sind die vier Objekte aufgeführt, die als Parameter akzeptiert werden.

Sr.Nr. Objekt & Beschreibung
1

InputStream stream

Jedes Inputstream-Objekt, das den Inhalt der Datei enthält

2

ContentHandler handler

Tika übergibt das Dokument als XHTML-Inhalt an diesen Handler. Anschließend wird das Dokument mithilfe der SAX-API verarbeitet. Es bietet eine effiziente Nachbearbeitung des Inhalts eines Dokuments.

3

Metadata metadata

Das Metadatenobjekt wird sowohl als Quelle als auch als Ziel für Dokumentmetadaten verwendet.

4

ParseContext context

Dieses Objekt wird in Fällen verwendet, in denen die Clientanwendung den Analyseprozess anpassen möchte.

Beispiel

Im Folgenden finden Sie ein Beispiel, das zeigt, wie die parse () -Methode verwendet wird.

Step 1 - -

Instanziieren Sie eine der Klassen, die die Implementierung für diese Schnittstelle bereitstellen, um die parse () -Methode der Parser-Schnittstelle zu verwenden.

Es gibt einzelne Parser-Klassen wie PDFParser, OfficeParser, XMLParser usw. Sie können jeden dieser einzelnen Dokument-Parser verwenden. Alternativ können Sie entweder CompositeParser oder AutoDetectParser verwenden, die alle Parser-Klassen intern verwenden und den Inhalt eines Dokuments mit einem geeigneten Parser extrahieren.

Parser parser = new AutoDetectParser();
   (or)
Parser parser = new CompositeParser();  
   (or)        
object of any individual parsers given in Tika Library

Step 2 - -

Erstellen Sie ein Handlerklassenobjekt. Im Folgenden sind die drei Inhaltshandler aufgeführt.

Sr.Nr. Klasse & Beschreibung
1

BodyContentHandler

Diese Klasse wählt den Hauptteil der XHTML-Ausgabe aus und schreibt diesen Inhalt in den Ausgabeschreiber oder Ausgabestream. Anschließend wird der XHTML-Inhalt an eine andere Content-Handler-Instanz umgeleitet.

2

LinkContentHandler

Diese Klasse erkennt und wählt alle H-Ref-Tags des XHTML-Dokuments aus und leitet diese für die Verwendung von Tools wie Webcrawlern weiter.

3

TeeContentHandler

Diese Klasse hilft bei der gleichzeitigen Verwendung mehrerer Werkzeuge.

Da unser Ziel darin besteht, den Textinhalt aus einem Dokument zu extrahieren, instanziieren Sie BodyContentHandler wie unten gezeigt -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 - -

Erstellen Sie das Metadatenobjekt wie unten gezeigt -

Metadata metadata = new Metadata();

Step 4 - -

Erstellen Sie eines der Eingabestream-Objekte und übergeben Sie Ihre zu extrahierende Datei.

FileInputstream

Instanziieren Sie ein Dateiobjekt, indem Sie den Dateipfad als Parameter übergeben und dieses Objekt an den Klassenkonstruktor FileInputStream übergeben.

Note - Der an das Dateiobjekt übergebene Pfad sollte keine Leerzeichen enthalten.

Das Problem bei diesen Eingabestreamklassen besteht darin, dass sie keine Lesevorgänge mit wahlfreiem Zugriff unterstützen, was erforderlich ist, um einige Dateiformate effizient zu verarbeiten. Um dieses Problem zu beheben, stellt Tika TikaInputStream zur Verfügung.

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

Step 5 - -

Erstellen Sie ein Analysekontextobjekt wie unten gezeigt -

ParseContext context =new ParseContext();

Step 6 - -

Instanziieren Sie das Parser-Objekt, rufen Sie die Analysemethode auf und übergeben Sie alle erforderlichen Objekte, wie im folgenden Prototyp gezeigt.

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

Im Folgenden finden Sie das Programm zum Extrahieren von Inhalten über die Parser-Oberfläche.

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());
   }
}

Speichern Sie den obigen Code als ParserExtraction.java und führen Sie ihn an der Eingabeaufforderung aus -

javac  ParserExtraction.java 
java  ParserExtraction

Unten ist der Inhalt von sample.txt angegeben

Hi students welcome to tutorialspoint

Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:

File content : Hi students welcome to tutorialspoint