Проблема с объединенными строками при извлечении текста из PDF с использованием PDFBox 2.x - PullRequest
0 голосов
/ 14 января 2019

У меня проблема с извлечением текста из PDF с использованием PDFTextStripper из PDFBox 2.0.13. Чтобы быть более конкретным - линии, которые находятся слишком близко друг к другу, объединяются вместе. Например: enter image description here

В первой строке есть текст " signfieldbig ", во второй строке есть подчеркивания, но PDFTextStripper проанализировал его как " s_i_g_n_fi_e_ld_b_ig_ _______ " (он объединил обе строки в одну ). Я пробовал несколько настроек (разные линии Separator, Tresholds и т.д ..), но ничего не помогло Эти две строки были объединены каждый раз, и я не могу просто удалить все ненужные символы из текста, потому что я ищу позицию этого заполнителя для создания поля подписи.

ОБНОВЛЕНИЕ: Я только что понял, что вызвало эту проблему - в исходном файле не две нормальные строки, разделенные разделителем строк, а одна строка с подчеркиванием и текстовая область, помещенная вручную, с текстом " placeholder " над этим. Но, тем не менее, средство просмотра PDF (просматривая его как текст) или другая библиотека PDF (iText 2.x) анализирует его как две отдельные строки ...

1 Ответ

0 голосов
/ 15 января 2019

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

(Очевидно, что оба типа стратегий могут сочетаться с определенной степенью анализа макета текста.)

В вашем случае сортировка активна, в результате чего подчеркивания и приведенный выше текст объединяются как "s_i_g_n_fi_e_ld_b_ig_ _______".

Вы можете отключить сортировку в редакторе текста pdfbox, используя setSortByPosition(false).


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

...