Python и pyPdf - как извлечь текст со страниц, чтобы между строк были пробелы

В настоящее время, если я создаю объект страницы pdf-страницы с pyPdf и extractText(), происходит то, что линии объединяются вместе. Например, если строка 1 страницы говорит "привет", а строка 2 говорит "мир", полученный текст, возвращенный из extractText(), является "helloworld" вместо "hello world". Кто-нибудь знает, как это исправить, или есть предложения по работе? Мне действительно нужен текст, чтобы иметь пробелы между строками, потому что я делаю текстовое разметки в этом pdf-тексте, а не пробелы между строк убивают его....

1 ответ

Это обычная проблема с синтаксисом 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>

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

Кроме того, вам может потребоваться запустить библиотеку словарей, например enchant, найти ошибки и исправить предложенное словарем как слово ошибки, но с пространством где-то, слово ошибки скорее всего будет ошибкой синтаксического анализа и может быть исправлено с предложением словарей.

Анализ PDF отстой, и если вы найдете лучший источник, используйте его.

licensed under cc by-sa 3.0 with attribution.