Я пытаюсь использовать borb для извлечения текста из PDF-файлов. Некоторые PDF-файлы работают хорошо, но при попытке извлечь текст из некоторых PDF-файлов я получаю лишние пробелы между всеми буквами и пробелами. Это выглядит как:
I N B E T A L N I N G / G I R E R I N G A V
Если я считаю пробелы и замечаю, что их больше, чем обычно, могу ли я каким-то образом использовать регулярное выражение, чтобы удалить один пробел везде?
Чтобы это выглядело так:
INBETALNING / GIRERING AV
Отказ от ответственности: я автор borb
PDF-документ на самом деле не содержит текста как есть. Он содержит инструкции по рендерингу, которые будет выполнять такая программа, как Adobe Reader. Эти инструкции дают нечто, что человек может интерпретировать как текст.
Например:
Вы заметите, что пробел в «Hello World» явно отсутствует в инструкциях по рендерингу. Возможно. Но не обязательно. И многие инструменты для создания PDF-файлов предпочитают не вставлять пробел, а перемещать курсор рисования.
Теперь, что это означает для извлечения текста, так это то, что программное обеспечение, такое как borb
, должно угадать, когда вставить пробел.
Он может сказать, как далеко друг от друга находятся ограничивающие прямоугольники двух символов.
Конечно, если символ пробела не используется в инструкциях по рендерингу, он может не быть включен в информацию о шрифте. Это называется поднабором шрифта. Где создается специализированный шрифт, содержащий только фактически используемые символы.
Когда это происходит, borb
не знает, насколько широким должен быть символ пробела.
borb
попробуем разные эвристики:
Если вы посмотрите на код SimpleTextExtraction
, вы сможете увидеть эту логику в действии.
Я предлагаю вам подклассировать этот класс и изменить его, чтобы вы (пользователь) могли определить приемлемую ширину символа пробела.
В частности, взгляните на эта линия.