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