Тика использует различные библиотеки парсеров для извлечения контента из заданных парсеров. Он выбирает правильный парсер для извлечения данного типа документа.
Для анализа документов обычно используется метод 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
Если вы выполните вышеупомянутую программу, она выдаст следующий вывод: