1

Я пытаюсь извлечь текст из pdf-документов. Я протестировал несколько таких инструментов, как PDFBox, TET, PDFTextStream и т. Д., Но ни один из них не подходит для извлечения текста персидских документов с несколькими столбцами pdf.Как определить столбцы PDFBox?

В настоящее время я пытаюсь совместить хорошие функции этих инструментов и использовать некоторые трюки на них. Теперь я хочу знать, как я могу определить количество столбцов страницы и как разбить тексты этих столбцов.

Специально я хочу знать, какой класс PDFBox или PDFTextStream отвечает за обнаружение столбцов и как он работает.

ответ

2

Я могу говорить только по телефону PDFTextStream, но для того, чтобы понять, как это работает, вы хотите понять, грубо говоря, как PDFTextStream просматривает документ PDF.

Каждый документ состоит из Pages, которые состоят из Blocks (из которых может быть много и вложенных). Blocks в конечном итоге будет содержать Lines, который будет содержать TextUnits.

Каждый из этих блоков имеет x, y, width и height. Все PDF-файлы - это базовые единицы, основанные на их координатах. Когда вы спрашиваете PDFTextStream, чтобы «прочитать» страницу или регион, он просматривает объекты и как они выложены на простой и простой основе, и использует приблизительное представление о том, как это перевести на текст. Вот почему вы получаете ошибки, потому что нет 100% надежного способа превратить эту структуру в машиночитаемые структурированные данные.

В PDFTextStream вы должны посмотреть на getRegionTextfunction and example. PDFTextStream является собственностью (причина, по которой я перехожу к PDFBox), поэтому я не могу дать вам подробные сведения об алгоритмах, используемых для извлечения текста, но они основаны на вышеупомянутом упрощении.

Удачи.

+0

'PDFTextStream' так же, как вы описали. Я глубоко проследил его основные объекты и [интерфейсы] (http://downloads.snowtide.com/javadoc/PDFTextStream/2.3.2/com/snowtide/pdf/PDFTextStream.html) этих объектов. Я думаю, что его 'API' действительно прост. Но основным недостатком 'PDFTextStream' является то, что он не поддерживает скрипты« справа налево »(например, персидский, арабский и иврит). Поэтому я перешел в 'PDFBox' тоже! Но 'PDFBox' имеет ошибку при извлечении текста документов RTL' pdf, однако он их поддерживает. Я думаю, что у нее есть архитектура «Work-Flow», поэтому ее очень сложно отладить. в любом случае, спасибо. – user2041057