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