python и pyPdf - как извлечь текст со страниц так, чтобы между строками были пробелы
-
16-09-2019 - |
Вопрос
в настоящее время, если я создаю объект page из PDF-страницы с помощью pyPdf и extractText(), то происходит объединение строк вместе.Например, если в строке 1 страницы написано "hello", а в строке 2 - "world", результирующий текст, возвращаемый из extractText(), будет "helloworld" вместо "hello world". Кто-нибудь знает, как это исправить, или у вас есть предложения по обходу?Мне действительно нужно, чтобы в тексте были пробелы между строками, потому что я выполняю интеллектуальный анализ текста в формате pdf, и отсутствие пробелов между строками убивает его....
Решение
Это распространенная проблема при разборе PDF-файлов.Вы также можете ожидать, что завершающие штрихи, которые вам придется исправить в некоторых случаях.Я придумал обходной путь для одного из моих проектов, который я вскоре опишу здесь:
Я использовал pdfminer извлечь XML из PDF, а также найти объединенные слова в XML.Я извлек тот же PDF-файл, что и HTML, и HTML может быть описан строками следующего регулярного выражения:
<span style="position:absolute; writing-mode:lr-tb; left:[0-9]+px; top:([0-9]+)px; font-size:[0-9]+px;">([^<]*)</span>
Промежутки расположены абсолютно и имеют стиль top, который вы можете использовать, чтобы определить, произошел ли разрыв строки.Если произошел разрыв строки и последнее слово в последней строке не имеет завершающего тире, вы можете отделить последнее слово в последней строке от первого слова в текущей строке.Это может быть сложно в деталях, но вы могли бы исправить почти все ошибки синтаксического анализа текста.
Кроме того, вы можете захотеть запустить библиотеку словарей, например зачаровывать поверх вашего текста найдите ошибки, и если исправление, предложенное словарем, похоже на слово error, но где-то с пробелом, слово error, скорее всего, является ошибкой синтаксического анализа и может быть исправлено с помощью предложений словарей.
Разбор PDF-файлов - отстой, и если вы найдете источник получше, используйте его.