TIKA - извлечение контента

Tika использует различные библиотеки парсеров для извлечения контента из заданных парсеров. Он выбирает правильный парсер для извлечения данного типа документа.

Для анализа документов обычно используется метод parseToString () фасадного класса Tika. Ниже показаны этапы процесса синтаксического анализа, абстрагированные с помощью метода Tika ParsertoString ().

Абстрагирование процесса синтаксического анализа -

  • Первоначально, когда мы передаем документ в Tika, он использует подходящий механизм определения типа, доступный вместе с ним, и определяет тип документа.

  • Как только тип документа известен, он выбирает подходящий парсер из своего репозитория парсеров. Репозиторий парсера содержит классы, которые используют внешние библиотеки.

  • Затем документ передается для выбора парсера, который будет анализировать содержимое, извлекать текст, а также генерировать исключения для нечитаемых форматов.

Извлечение контента с помощью Tika

Ниже приведена программа для извлечения текста из файла с использованием класса фасада 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);
   }		 
}

Сохраните приведенный выше код как TikaExtraction.java и запустите его из командной строки -

javac TikaExtraction.java 
java TikaExtraction

Ниже приводится содержимое файла sample.txt.

Hi students welcome to tutorialspoint

Это дает вам следующий результат -

Extracted Content: Hi students welcome to tutorialspoint

Извлечение контента с использованием интерфейса парсера

Пакет парсера Tika предоставляет несколько интерфейсов и классов, с помощью которых мы можем анализировать текстовый документ. Ниже приведена блок-схемаorg.apache.tika.parser пакет.

Доступно несколько классов парсеров, например парсер pdf, Mp3Passer, OfficeParser и т. Д., Для индивидуального анализа соответствующих документов. Все эти классы реализуют интерфейс парсера.

CompositeParser

На данной диаграмме показаны классы парсеров общего назначения Tika: CompositeParser и AutoDetectParser. Поскольку класс CompositeParser следует шаблону составного проектирования, вы можете использовать группу экземпляров анализатора в качестве одного анализатора. Класс CompositeParser также обеспечивает доступ ко всем классам, реализующим интерфейс парсера.

AutoDetectParser

Это подкласс CompositeParser, обеспечивающий автоматическое определение типа. Используя эту функциональность, AutoDetectParser автоматически отправляет входящие документы в соответствующие классы синтаксического анализатора, используя составную методологию.

parse () метод

Наряду с parseToString () вы также можете использовать метод parse () интерфейса парсера. Прототип этого метода показан ниже.

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

В следующей таблице перечислены четыре объекта, которые он принимает в качестве параметров.

Sr. No. Объект и описание
1

InputStream stream

Любой объект Inputstream, содержащий содержимое файла

2

ContentHandler handler

Tika передает документ как содержимое XHTML этому обработчику, после чего документ обрабатывается с использованием SAX API. Он обеспечивает эффективную постобработку содержимого документа.

3

Metadata metadata

Объект метаданных используется как источник и цель метаданных документа.

4

ParseContext context

Этот объект используется в случаях, когда клиентское приложение хочет настроить процесс синтаксического анализа.

пример

Ниже приведен пример, показывающий, как используется метод parse ().

Step 1 -

Чтобы использовать метод parse () интерфейса синтаксического анализатора, создайте экземпляр любого из классов, обеспечивающих реализацию этого интерфейса.

Существуют отдельные классы парсеров, такие как PDFParser, OfficeParser, XMLParser и т. Д. Вы можете использовать любой из этих индивидуальных парсеров документов. В качестве альтернативы вы можете использовать CompositeParser или AutoDetectParser, который использует все классы синтаксического анализатора внутри и извлекает содержимое документа с помощью подходящего синтаксического анализатора.

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

Step 2 -

Создайте объект класса обработчика. Ниже приведены три обработчика контента -

Sr. No. Класс и описание
1

BodyContentHandler

Этот класс выбирает часть тела вывода XHTML и записывает это содержимое в средство записи вывода или поток вывода. Затем он перенаправляет содержимое XHTML в другой экземпляр обработчика содержимого.

2

LinkContentHandler

Этот класс обнаруживает и выбирает все теги H-Ref документа XHTML и пересылает их для использования в таких инструментах, как поисковые роботы.

3

TeeContentHandler

Этот класс помогает одновременно использовать несколько инструментов.

Поскольку наша цель - извлечь текстовое содержимое из документа, создайте экземпляр BodyContentHandler, как показано ниже -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Создайте объект метаданных, как показано ниже -

Metadata metadata = new Metadata();

Step 4 -

Создайте любой из объектов входного потока и передайте ему файл, который нужно извлечь.

FileInputstream

Создайте экземпляр файлового объекта, передав путь к файлу в качестве параметра, и передайте этот объект конструктору класса FileInputStream.

Note - Путь, передаваемый к файловому объекту, не должен содержать пробелов.

Проблема с этими классами входного потока заключается в том, что они не поддерживают чтение с произвольным доступом, которое требуется для эффективной обработки некоторых форматов файлов. Чтобы решить эту проблему, Tika предоставляет TikaInputStream.

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

Step 5 -

Создайте объект контекста синтаксического анализа, как показано ниже -

ParseContext context =new ParseContext();

Step 6 -

Создайте экземпляр объекта анализатора, вызовите метод синтаксического анализа и передайте все необходимые объекты, как показано в прототипе ниже -

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

Ниже приведена программа для извлечения контента с использованием интерфейса парсера -

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

Сохраните приведенный выше код как ParserExtraction.java и запустите его из командной строки -

javac  ParserExtraction.java 
java  ParserExtraction

Ниже приводится содержимое файла sample.txt.

Hi students welcome to tutorialspoint

Если вы выполните указанную выше программу, она даст вам следующий результат:

File content : Hi students welcome to tutorialspoint