TIKA - Extraction de contenu

Tika utilise diverses bibliothèques d'analyseurs pour extraire le contenu d'analyseurs donnés. Il choisit le bon analyseur pour extraire le type de document donné.

Pour l'analyse des documents, la méthode parseToString () de la classe de façade Tika est généralement utilisée. Vous trouverez ci-dessous les étapes impliquées dans le processus d'analyse et celles-ci sont résumées par la méthode Tika ParsertoString ().

Abstrait du processus d'analyse -

  • Au départ, lorsque nous transmettons un document à Tika, il utilise un mécanisme de détection de type approprié disponible avec celui-ci et détecte le type de document.

  • Une fois le type de document connu, il choisit un analyseur approprié dans son référentiel d'analyseurs. Le référentiel de l'analyseur contient des classes qui utilisent des bibliothèques externes.

  • Ensuite, le document est passé pour choisir l'analyseur qui analysera le contenu, extraira le texte et lèvera également des exceptions pour les formats illisibles.

Extraction de contenu à l'aide de Tika

Vous trouverez ci-dessous le programme d'extraction de texte d'un fichier à l'aide de la classe de façade 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);
   }		 
}

Enregistrez le code ci-dessus sous TikaExtraction.java et exécutez-le à partir de l'invite de commande -

javac TikaExtraction.java 
java TikaExtraction

Ci-dessous se trouve le contenu de sample.txt.

Hi students welcome to tutorialspoint

Il vous donne la sortie suivante -

Extracted Content: Hi students welcome to tutorialspoint

Extraction de contenu à l'aide de l'interface d'analyseur

Le package parser de Tika fournit plusieurs interfaces et classes à l'aide desquelles nous pouvons analyser un document texte. Vous trouverez ci-dessous le schéma de principe duorg.apache.tika.parser paquet.

Il existe plusieurs classes d'analyseurs disponibles, par exemple, l'analyseur pdf, Mp3Passer, OfficeParser, etc., pour analyser les documents respectifs individuellement. Toutes ces classes implémentent l'interface de l'analyseur.

CompositeParser

Le diagramme donné montre les classes d'analyseurs polyvalentes de Tika: CompositeParser et AutoDetectParser. Étant donné que la classe CompositeParser suit le modèle de conception composite, vous pouvez utiliser un groupe d'instances d'analyseur en tant qu'analyseur unique. La classe CompositeParser permet également d'accéder à toutes les classes qui implémentent l'interface de l'analyseur.

AutoDetectParser

Il s'agit d'une sous-classe de CompositeParser et il fournit une détection de type automatique. À l'aide de cette fonctionnalité, AutoDetectParser envoie automatiquement les documents entrants aux classes d'analyseur appropriées à l'aide de la méthodologie composite.

méthode parse ()

Avec parseToString (), vous pouvez également utiliser la méthode parse () de l'interface analyseur. Le prototype de cette méthode est présenté ci-dessous.

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

Le tableau suivant répertorie les quatre objets qu'il accepte comme paramètres.

N ° Sr. Objet et description
1

InputStream stream

Tout objet Inputstream contenant le contenu du fichier

2

ContentHandler handler

Tika transmet le document en tant que contenu XHTML à ce gestionnaire, puis le document est traité à l'aide de SAX API. Il permet un post-traitement efficace du contenu d'un document.

3

Metadata metadata

L'objet de métadonnées est utilisé à la fois comme source et comme cible des métadonnées de document.

4

ParseContext context

Cet objet est utilisé dans les cas où l'application cliente souhaite personnaliser le processus d'analyse.

Exemple

Vous trouverez ci-dessous un exemple qui montre comment la méthode parse () est utilisée.

Step 1 -

Pour utiliser la méthode parse () de l'interface de l'analyseur, instanciez l'une des classes fournissant l'implémentation de cette interface.

Il existe des classes d'analyseurs individuelles telles que PDFParser, OfficeParser, XMLParser, etc. Vous pouvez utiliser n'importe lequel de ces analyseurs de documents individuels. Vous pouvez également utiliser CompositeParser ou AutoDetectParser qui utilise toutes les classes d'analyseur en interne et extrait le contenu d'un document à l'aide d'un analyseur approprié.

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

Step 2 -

Créez un objet de classe de gestionnaire. Vous trouverez ci-dessous les trois gestionnaires de contenu -

N ° Sr. Classe et description
1

BodyContentHandler

Cette classe sélectionne la partie corps de la sortie XHTML et écrit ce contenu dans l'enregistreur de sortie ou le flux de sortie. Ensuite, il redirige le contenu XHTML vers une autre instance de gestionnaire de contenu.

2

LinkContentHandler

Cette classe détecte et sélectionne toutes les balises H-Ref du document XHTML et les transmet pour l'utilisation d'outils tels que les robots d'exploration Web.

3

TeeContentHandler

Cette classe aide à utiliser plusieurs outils simultanément.

Puisque notre objectif est d'extraire le contenu du texte d'un document, instanciez BodyContentHandler comme indiqué ci-dessous -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Créez l'objet Metadata comme indiqué ci-dessous -

Metadata metadata = new Metadata();

Step 4 -

Créez l'un des objets de flux d'entrée et transmettez-lui votre fichier qui doit être extrait.

FileInputstream

Instanciez un objet fichier en passant le chemin du fichier en tant que paramètre et transmettez cet objet au constructeur de classe FileInputStream.

Note - Le chemin transmis à l'objet fichier ne doit pas contenir d'espaces.

Le problème avec ces classes de flux d'entrée est qu'elles ne prennent pas en charge les lectures à accès aléatoire, ce qui est nécessaire pour traiter efficacement certains formats de fichiers. Pour résoudre ce problème, Tika fournit TikaInputStream.

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

Step 5 -

Créez un objet de contexte d'analyse comme indiqué ci-dessous -

ParseContext context =new ParseContext();

Step 6 -

Instanciez l'objet parser, appelez la méthode parse et transmettez tous les objets requis, comme indiqué dans le prototype ci-dessous -

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

Vous trouverez ci-dessous le programme d'extraction de contenu à l'aide de l'interface parseur -

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

Enregistrez le code ci-dessus sous ParserExtraction.java et exécutez-le à partir de l'invite de commande -

javac  ParserExtraction.java 
java  ParserExtraction

Ci-dessous, le contenu de sample.txt

Hi students welcome to tutorialspoint

Si vous exécutez le programme ci-dessus, il vous donnera la sortie suivante -

File content : Hi students welcome to tutorialspoint