Borb при чтении pdf приводит к пробелам между всеми буквами

Я пытаюсь использовать 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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отказ от ответственности: я автор borb

PDF-документ на самом деле не содержит текста как есть. Он содержит инструкции по рендерингу, которые будет выполнять такая программа, как Adobe Reader. Эти инструкции дают нечто, что человек может интерпретировать как текст.

Например:

  • перейти на позицию 30, 50
  • использовать шрифт Helvetica
  • установить цвет на черный
  • визуализировать символы «Привет»
  • перейти на 36, 50
  • визуализировать персонажей "Мир"

Вы заметите, что пробел в «Hello World» явно отсутствует в инструкциях по рендерингу. Возможно. Но не обязательно. И многие инструменты для создания PDF-файлов предпочитают не вставлять пробел, а перемещать курсор рисования.

Теперь, что это означает для извлечения текста, так это то, что программное обеспечение, такое как borb, должно угадать, когда вставить пробел.

Он может сказать, как далеко друг от друга находятся ограничивающие прямоугольники двух символов.

Конечно, если символ пробела не используется в инструкциях по рендерингу, он может не быть включен в информацию о шрифте. Это называется поднабором шрифта. Где создается специализированный шрифт, содержащий только фактически используемые символы.

Когда это происходит, borb не знает, насколько широким должен быть символ пробела.

borb попробуем разные эвристики:

  • проверка, является ли шрифт моноширинным
  • проверка того, определено ли достаточно других символов (например, «пробел в два раза шире символа «i»)
  • вернуться к умолчанию

Если вы посмотрите на код SimpleTextExtraction, вы сможете увидеть эту логику в действии.

Я предлагаю вам подклассировать этот класс и изменить его, чтобы вы (пользователь) могли определить приемлемую ширину символа пробела.

В частности, взгляните на эта линия.

Другие вопросы по теме