Учебники

ТИКА — Извлечение контента

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

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

Процесс синтаксического анализа

Абстрагирование процесса разбора —

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

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

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

Первоначально, когда мы передаем документ в 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

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

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

Интерфейс парсера

Существует несколько доступных классов синтаксического анализатора, например, pdf parser, 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

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

3

Метаданные метаданные

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

4

ParseContext context

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

InputStream stream

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

Обработчик ContentHandler

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

Метаданные метаданные

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

ParseContext context

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

пример

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

Шаг 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 

Шаг 2

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

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

BodyContentHandler

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

2

LinkContentHandler

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

3

TeeContentHandler

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

BodyContentHandler

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

LinkContentHandler

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

TeeContentHandler

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

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

BodyContentHandler handler = new BodyContentHandler( );

Шаг 3

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

Metadata metadata = new Metadata();

Шаг 4

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

FileInputStream

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

Примечание . Путь к объекту файла не должен содержать пробелов.

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

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

Шаг 5

Создайте объект контекста разбора, как показано ниже —

ParseContext context =new ParseContext();

Шаг 6

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

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

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