TIKA - Extracción de contenido

Tika utiliza varias bibliotecas de analizadores para extraer contenido de analizadores determinados. Elige el analizador adecuado para extraer el tipo de documento dado.

Para analizar documentos, generalmente se usa el método parseToString () de la clase de fachada Tika. A continuación se muestran los pasos involucrados en el proceso de análisis y estos son abstraídos por el método Tika ParsertoString ().

Resumen del proceso de análisis -

  • Inicialmente, cuando pasamos un documento a Tika, utiliza un mecanismo de detección de tipo adecuado disponible con él y detecta el tipo de documento.

  • Una vez que se conoce el tipo de documento, elige un analizador adecuado de su repositorio de analizadores. El repositorio del analizador contiene clases que utilizan bibliotecas externas.

  • Luego, se pasa el documento para elegir el analizador que analizará el contenido, extraerá el texto y también arrojará excepciones para formatos ilegibles.

Extracción de contenido usando Tika

A continuación se muestra el programa para extraer texto de un archivo utilizando la clase de fachada 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);
   }		 
}

Guarde el código anterior como TikaExtraction.java y ejecútelo desde el símbolo del sistema -

javac TikaExtraction.java 
java TikaExtraction

A continuación se muestra el contenido de sample.txt.

Hi students welcome to tutorialspoint

Te da el siguiente resultado:

Extracted Content: Hi students welcome to tutorialspoint

Extracción de contenido mediante la interfaz del analizador

El paquete analizador de Tika proporciona varias interfaces y clases mediante las cuales podemos analizar un documento de texto. A continuación se muestra el diagrama de bloques delorg.apache.tika.parser paquete.

Hay varias clases de analizador disponibles, por ejemplo, analizador de pdf, Mp3Passer, OfficeParser, etc., para analizar los documentos respectivos individualmente. Todas estas clases implementan la interfaz del analizador.

CompuestoParser

El diagrama dado muestra las clases de analizador de propósito general de Tika: CompositeParser y AutoDetectParser. Dado que la clase CompositeParser sigue un patrón de diseño compuesto, puede usar un grupo de instancias de analizador como un solo analizador. La clase CompositeParser también permite el acceso a todas las clases que implementan la interfaz del analizador.

AutoDetectParser

Esta es una subclase de CompositeParser y proporciona detección automática de tipos. Usando esta funcionalidad, AutoDetectParser envía automáticamente los documentos entrantes a las clases de analizador apropiadas usando la metodología compuesta.

método parse ()

Junto con parseToString (), también puede utilizar el método parse () de la interfaz del analizador. El prototipo de este método se muestra a continuación.

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

La siguiente tabla enumera los cuatro objetos que acepta como parámetros.

No Señor. Descripción del objeto
1

InputStream stream

Cualquier objeto Inputstream que contenga el contenido del archivo

2

ContentHandler handler

Tika pasa el documento como contenido XHTML a este controlador, luego el documento se procesa usando la API SAX. Proporciona un posprocesamiento eficiente del contenido de un documento.

3

Metadata metadata

El objeto de metadatos se utiliza como fuente y destino de los metadatos del documento.

4

ParseContext context

Este objeto se utiliza en los casos en que la aplicación cliente desea personalizar el proceso de análisis.

Ejemplo

A continuación se muestra un ejemplo que muestra cómo se usa el método parse ().

Step 1 -

Para usar el método parse () de la interfaz del analizador, cree una instancia de cualquiera de las clases que proporcionan la implementación para esta interfaz.

Hay clases de analizadores individuales como PDFParser, OfficeParser, XMLParser, etc. Puede utilizar cualquiera de estos analizadores de documentos individuales. Alternativamente, puede usar CompositeParser o AutoDetectParser que usa todas las clases de analizador internamente y extrae el contenido de un documento usando un analizador adecuado.

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

Step 2 -

Cree un objeto de clase de controlador. A continuación se muestran los tres controladores de contenido:

No Señor. Clase y descripción
1

BodyContentHandler

Esta clase elige la parte del cuerpo de la salida XHTML y escribe ese contenido en el escritor de salida o en el flujo de salida. Luego, redirige el contenido XHTML a otra instancia de controlador de contenido.

2

LinkContentHandler

Esta clase detecta y elige todas las etiquetas H-Ref del documento XHTML y las reenvía para el uso de herramientas como rastreadores web.

3

TeeContentHandler

Esta clase ayuda a usar múltiples herramientas simultáneamente.

Dado que nuestro objetivo es extraer el contenido de texto de un documento, cree una instancia de BodyContentHandler como se muestra a continuación:

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Cree el objeto de metadatos como se muestra a continuación:

Metadata metadata = new Metadata();

Step 4 -

Cree cualquiera de los objetos de flujo de entrada y pase el archivo que debe extraerse.

FileInputstream

Cree una instancia de un objeto de archivo pasando la ruta del archivo como parámetro y pase este objeto al constructor de la clase FileInputStream.

Note - La ruta pasada al objeto de archivo no debe contener espacios.

El problema con estas clases de flujo de entrada es que no admiten lecturas de acceso aleatorio, que se requieren para procesar algunos formatos de archivo de manera eficiente. Para resolver este problema, Tika proporciona TikaInputStream.

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

Step 5 -

Cree un objeto de contexto de análisis como se muestra a continuación:

ParseContext context =new ParseContext();

Step 6 -

Cree una instancia del objeto del analizador, invoque el método de análisis y pase todos los objetos necesarios, como se muestra en el prototipo a continuación:

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

A continuación se muestra el programa para la extracción de contenido utilizando la interfaz del analizador:

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

Guarde el código anterior como ParserExtraction.java y ejecútelo desde el símbolo del sistema -

javac  ParserExtraction.java 
java  ParserExtraction

A continuación se muestra el contenido de sample.txt

Hi students welcome to tutorialspoint

Si ejecuta el programa anterior, le dará el siguiente resultado:

File content : Hi students welcome to tutorialspoint