Извлекать PDF-текст внутри ограничительной рамки прямо в Python - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь извлечь текст из PDF в пределах данного ограничивающего прямоугольника. Я понимаю, что есть инструменты для очистки PDF, такие как pdfminer, pypdf и pdftotext. Я экспериментировал со всеми тремя, и до сих пор я получил только код для pdftotext для извлечения текста из заданной ограничительной рамки. Этот код выглядит примерно так:

s = "pdftotext -x %d -y %d -w %d -h %d"
s = s%(<various inputs into my function>)
cmd = [s, pdf_path,
           text_out]
subprocess.call(cmd)

Однако, это выводит / записывает текстовый файл. Я хочу использовать этот текст ~ немедленно, что означает, что я не хочу идти, и мне нужно открыть текстовый файл, чтобы извлечь все слова, которые были в этом ограничивающем прямоугольнике, так как я сделаю это для 10 000+ документов, и открытие такого количества файлов может быть болью Я в основном запускаю приглашение командной строки из своего скрипта на python, так что я не думаю, что на самом деле найдется способ обойти это, но я не уверен. Так как pdfminer & pypdf являются реальными пакетами Python, я могу получить их текст, но, похоже, у них нет никаких средств для извлечения текста в заданных пределах пикселей.

Как еще примечание - я собираюсь сделать это специально на python, так как у меня есть тонна другого кода для того же всеобъемлющего проекта.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Пакет PyMuPDF / Fitz работает для этого. Они предоставляют сценарий по адресу: https://github.com/pymupdf/PyMuPDF/wiki/How-to-extract-text-from-a-rectangle https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/textboxtract.py

Их скрипт работает, находя ограничивающие слова, вместо этого вы можете заменить его прямоугольником, просто выполнив rect = fitz.Rect (x0, y0, x1, y1) вместо rect = ~ их материал ~. Также pno - номер страницы, с которой вы извлекаете информацию, если она не ясна.

0 голосов
/ 09 апреля 2019

Вы можете открыть текстовый файл, используя text=open(text_out,'r').read(), который поместит весь текст из этого текстового файла в одну строку.Затем вы можете разобрать эту строку в список строк, используя text.split('your_delimiter') в зависимости от выбранного разделителя.

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