TIKA - Extração de Conteúdo
Tika usa várias bibliotecas de analisadores para extrair conteúdo de determinados analisadores. Ele escolhe o analisador correto para extrair o tipo de documento fornecido.
Para analisar documentos, o método parseToString () da classe de fachada Tika geralmente é usado. Abaixo estão as etapas envolvidas no processo de análise e são abstraídas pelo método Tika ParsertoString ().
Abstraindo o processo de análise -
Inicialmente, quando passamos um documento para Tika, ele usa um mecanismo de detecção de tipo adequado disponível com ele e detecta o tipo de documento.
Uma vez que o tipo de documento é conhecido, ele escolhe um analisador adequado em seu repositório de analisador. O repositório do analisador contém classes que fazem uso de bibliotecas externas.
Em seguida, o documento é passado para escolher o analisador que analisará o conteúdo, extrairá o texto e também lançará exceções para formatos ilegíveis.
Extração de conteúdo usando Tika
A seguir está o programa para extrair texto de um arquivo usando a classe 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);
}
}
Salve o código acima como TikaExtraction.java e execute-o no prompt de comando -
javac TikaExtraction.java
java TikaExtraction
A seguir está o conteúdo de sample.txt.
Hi students welcome to tutorialspoint
Ele fornece a seguinte saída -
Extracted Content: Hi students welcome to tutorialspoint
Extração de conteúdo usando a interface do analisador
O pacote analisador de Tika fornece várias interfaces e classes com as quais podemos analisar um documento de texto. A seguir está o diagrama de blocos doorg.apache.tika.parser pacote.
Existem várias classes de analisador disponíveis, por exemplo, analisador de pdf, Mp3Passer, OfficeParser, etc., para analisar os respectivos documentos individualmente. Todas essas classes implementam a interface do analisador.
CompositeParser
O diagrama fornecido mostra as classes do analisador de propósito geral de Tika: CompositeParser e AutoDetectParser. Como a classe CompositeParser segue o padrão de design composto, você pode usar um grupo de instâncias do analisador como um único analisador. A classe CompositeParser também permite acesso a todas as classes que implementam a interface do analisador.
AutoDetectParser
Esta é uma subclasse de CompositeParser e fornece detecção automática de tipo. Usando essa funcionalidade, o AutoDetectParser envia automaticamente os documentos recebidos para as classes de analisador apropriadas usando a metodologia composta.
método parse ()
Junto com parseToString (), você também pode usar o método parse () da interface do analisador. O protótipo deste método é mostrado abaixo.
parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)
A tabela a seguir lista os quatro objetos que aceita como parâmetros.
Sr. Não. | Objeto e descrição |
---|---|
1 | InputStream stream Qualquer objeto Inputstream que contenha o conteúdo do arquivo |
2 | ContentHandler handler Tika passa o documento como conteúdo XHTML para este manipulador, depois disso, o documento é processado usando SAX API. Ele fornece pós-processamento eficiente do conteúdo de um documento. |
3 | Metadata metadata O objeto de metadados é usado como fonte e como destino dos metadados do documento. |
4 | ParseContext context Este objeto é usado nos casos em que o aplicativo cliente deseja personalizar o processo de análise. |
Exemplo
Abaixo está um exemplo que mostra como o método parse () é usado.
Step 1 -
Para usar o método parse () da interface do analisador, instancie qualquer uma das classes que fornecem a implementação para essa interface.
Existem classes de analisadores individuais, como PDFParser, OfficeParser, XMLParser, etc. Você pode usar qualquer um desses analisadores de documentos individuais. Como alternativa, você pode usar CompositeParser ou AutoDetectParser que usa todas as classes do analisador internamente e extrai o conteúdo de um documento usando um analisador adequado.
Parser parser = new AutoDetectParser();
(or)
Parser parser = new CompositeParser();
(or)
object of any individual parsers given in Tika Library
Step 2 -
Crie um objeto de classe de manipulador. Abaixo estão os três manipuladores de conteúdo -
Sr. Não. | Classe e descrição |
---|---|
1 | BodyContentHandler Esta classe escolhe a parte do corpo da saída XHTML e grava esse conteúdo no gravador de saída ou fluxo de saída. Em seguida, ele redireciona o conteúdo XHTML para outra instância do manipulador de conteúdo. |
2 | LinkContentHandler Esta classe detecta e seleciona todas as tags H-Ref do documento XHTML e as encaminha para o uso de ferramentas como rastreadores da web. |
3 | TeeContentHandler Esta classe ajuda a usar várias ferramentas simultaneamente. |
Como nosso objetivo é extrair o conteúdo de texto de um documento, instancie BodyContentHandler conforme mostrado abaixo -
BodyContentHandler handler = new BodyContentHandler( );
Step 3 -
Crie o objeto de metadados conforme mostrado abaixo -
Metadata metadata = new Metadata();
Step 4 -
Crie qualquer um dos objetos de fluxo de entrada e passe o arquivo que deve ser extraído para ele.
FileInputstream
Instancie um objeto de arquivo passando o caminho do arquivo como parâmetro e passe esse objeto para o construtor da classe FileInputStream.
Note - O caminho passado para o objeto de arquivo não deve conter espaços.
O problema com essas classes de fluxo de entrada é que elas não suportam leituras de acesso aleatório, o que é necessário para processar alguns formatos de arquivo com eficiência. Para resolver esse problema, a Tika fornece o TikaInputStream.
File file = new File(filepath)
FileInputStream inputstream = new FileInputStream(file);
(or)
InputStream stream = TikaInputStream.get(new File(filename));
Step 5 -
Crie um objeto de contexto de análise conforme mostrado abaixo -
ParseContext context =new ParseContext();
Step 6 -
Instancie o objeto analisador, invoque o método parse e passe todos os objetos necessários, conforme mostrado no protótipo abaixo -
parser.parse(inputstream, handler, metadata, context);
A seguir está o programa para extração de conteúdo usando a interface do analisador -
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());
}
}
Salve o código acima como ParserExtraction.java e execute-o no prompt de comando -
javac ParserExtraction.java
java ParserExtraction
A seguir está o conteúdo de sample.txt
Hi students welcome to tutorialspoint
Se você executar o programa acima, ele fornecerá a seguinte saída -
File content : Hi students welcome to tutorialspoint