TIKA - Estrazione del contenuto

Tika utilizza varie librerie di parser per estrarre il contenuto da determinati parser. Sceglie il parser giusto per estrarre il tipo di documento specificato.

Per analizzare i documenti, viene generalmente utilizzato il metodo parseToString () della classe di facciata Tika. Di seguito sono mostrati i passaggi coinvolti nel processo di analisi e questi sono astratti dal metodo Tika ParsertoString ().

Astrazione del processo di analisi -

  • Inizialmente, quando passiamo un documento a Tika, utilizza un meccanismo di rilevamento del tipo adatto disponibile con esso e rileva il tipo di documento.

  • Una volta che il tipo di documento è noto, sceglie un parser adatto dal suo repository parser. Il repository parser contiene classi che fanno uso di librerie esterne.

  • Quindi il documento viene passato per scegliere il parser che analizzerà il contenuto, estrarrà il testo e genererà anche eccezioni per formati illeggibili.

Estrazione di contenuti utilizzando Tika

Di seguito è riportato il programma per estrarre il testo da un file utilizzando la classe di facciata 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);
   }		 
}

Salva il codice sopra come TikaExtraction.java ed eseguilo dal prompt dei comandi -

javac TikaExtraction.java 
java TikaExtraction

Di seguito è riportato il contenuto di sample.txt.

Hi students welcome to tutorialspoint

Ti dà il seguente output:

Extracted Content: Hi students welcome to tutorialspoint

Estrazione del contenuto utilizzando l'interfaccia parser

Il pacchetto parser di Tika fornisce diverse interfacce e classi utilizzando le quali possiamo analizzare un documento di testo. Di seguito è riportato lo schema a blocchi diorg.apache.tika.parser pacchetto.

Sono disponibili diverse classi di parser, ad esempio pdf parser, Mp3Passer, OfficeParser, ecc., Per analizzare i rispettivi documenti individualmente. Tutte queste classi implementano l'interfaccia del parser.

CompositeParser

Il diagramma fornito mostra le classi di parser generiche di Tika: CompositeParser e AutoDetectParser. Poiché la classe CompositeParser segue il modello di progettazione composto, è possibile utilizzare un gruppo di istanze del parser come un singolo parser. La classe CompositeParser consente inoltre l'accesso a tutte le classi che implementano l'interfaccia del parser.

AutoDetectParser

Questa è una sottoclasse di CompositeParser e fornisce il rilevamento automatico del tipo. Utilizzando questa funzionalità, AutoDetectParser invia automaticamente i documenti in entrata alle classi parser appropriate utilizzando la metodologia composita.

metodo parse ()

Insieme a parseToString (), puoi anche usare il metodo parse () dell'interfaccia del parser. Il prototipo di questo metodo è mostrato di seguito.

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

La tabella seguente elenca i quattro oggetti che accetta come parametri.

Sr.No. Oggetto e descrizione
1

InputStream stream

Qualsiasi oggetto Inputstream che contiene il contenuto del file

2

ContentHandler handler

Tika passa il documento come contenuto XHTML a questo gestore, dopodiché il documento viene elaborato utilizzando SAX API. Fornisce una post-elaborazione efficiente dei contenuti in un documento.

3

Metadata metadata

L'oggetto metadati viene utilizzato sia come origine che come destinazione dei metadati del documento.

4

ParseContext context

Questo oggetto viene utilizzato nei casi in cui l'applicazione client desidera personalizzare il processo di analisi.

Esempio

Di seguito è riportato un esempio che mostra come viene utilizzato il metodo parse ().

Step 1 -

Per utilizzare il metodo parse () dell'interfaccia del parser, istanziare una qualsiasi delle classi che forniscono l'implementazione per questa interfaccia.

Esistono singole classi di parser come PDFParser, OfficeParser, XMLParser, ecc. È possibile utilizzare uno qualsiasi di questi singoli parser di documenti. In alternativa, è possibile utilizzare CompositeParser o AutoDetectParser che utilizza internamente tutte le classi parser ed estrae il contenuto di un documento utilizzando un parser adatto.

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

Step 2 -

Crea un oggetto classe gestore. Di seguito sono riportati i tre gestori di contenuti:

Sr.No. Classe e descrizione
1

BodyContentHandler

Questa classe sceglie la parte del corpo dell'output XHTML e scrive quel contenuto nel writer di output o nel flusso di output. Quindi reindirizza il contenuto XHTML a un'altra istanza del gestore di contenuti.

2

LinkContentHandler

Questa classe rileva e seleziona tutti i tag H-Ref del documento XHTML e li inoltra per l'utilizzo di strumenti come i web crawler.

3

TeeContentHandler

Questa classe aiuta a utilizzare più strumenti contemporaneamente.

Poiché il nostro obiettivo è estrarre il contenuto del testo da un documento, istanziare BodyContentHandler come mostrato di seguito -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Crea l'oggetto Metadati come mostrato di seguito -

Metadata metadata = new Metadata();

Step 4 -

Crea uno qualsiasi degli oggetti del flusso di input e passa il tuo file che dovrebbe essere estratto ad esso.

FileInputstream

Creare un'istanza di un oggetto file passando il percorso del file come parametro e passare questo oggetto al costruttore della classe FileInputStream.

Note - Il percorso passato all'oggetto file non deve contenere spazi.

Il problema con queste classi di flussi di input è che non supportano le letture ad accesso casuale, necessarie per elaborare alcuni formati di file in modo efficiente. Per risolvere questo problema, Tika fornisce TikaInputStream.

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

Step 5 -

Crea un oggetto contesto di analisi come mostrato di seguito:

ParseContext context =new ParseContext();

Step 6 -

Istanziare l'oggetto parser, invocare il metodo di analisi e passare tutti gli oggetti richiesti, come mostrato nel prototipo di seguito -

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

Di seguito è riportato il programma per l'estrazione del contenuto utilizzando l'interfaccia del parser:

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

Salva il codice sopra come ParserExtraction.java ed eseguilo dal prompt dei comandi -

javac  ParserExtraction.java 
java  ParserExtraction

Di seguito è riportato il contenuto di sample.txt

Hi students welcome to tutorialspoint

Se esegui il programma sopra, ti darà il seguente output:

File content : Hi students welcome to tutorialspoint