Возвращать текстовую строку из физических координат в PDF с помощью Python

Я боролся с Google и ограниченной документацией PDFMiner в течение последних нескольких часов, и, хотя я чувствую себя близко, я просто не получаю то, что мне нужно. Я работал через http://www.unixuser.org/~euske/python/pdfminer/ и все три видеоролика YouTube, чтобы получить лучшее представление о файлах PDF, и я в состоянии выводить исходный текст просто отлично.

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

Есть ли кто-нибудь, кто может пролить свет на то, как это делается с помощью PDFMiner? Я открыт для других модулей, если есть очевидный лучший выбор, однако мне нужно придерживаться Python для скрипта.

Кроме того, я также попытался использовать PyPdf (кроме основного вывода текста).

Благодаря!

  • Расширение Python C - Почему методы, которые используют аргументы ключевых слов, передаваемые в PyCFunction
  • Как пометить текстовые файлы hunpos в nltk?
  • Как я могу обрабатывать аргументы командной строки в Python?
  • Python - загрузка файла с помощью запросов, непосредственно в память
  • Объединение файлов hdf5
  • Подчеркивание _ как имя переменной в Python
  • Python Variable Scope (передача по ссылке или копирование?)
  • Python для понимания словарей в словарях?
  • 2 Solutions collect form web for “Возвращать текстовую строку из физических координат в PDF с помощью Python”

    Мне удалось найти дорогу через pdfminer благодаря некоторому коду Дениса Папатанасиу. Код обсуждается в его блоге , и вы можете найти источник здесь: layout_scanner.py

    В частности, взгляните на метод parse_lt_objs (). В последнем цикле k должна быть пара, содержащая координаты этого бита текста (и отбрасывается). У меня нет рабочего координатора для отправки здесь (меня это не интересовало), но похоже, что вам не составит труда найти свой путь оттуда.

    Удачи вам!

    Я писал библиотеку, чтобы попытаться упростить этот процесс, pdfquery . Чтобы извлечь текст из определенного места на определенной странице, выполните следующие действия:

    pdf = pdfquery.PDFQuery(file) # load first, third, fourth pages pdf.load(0, 2, 3) # find text between 100 and 300 points from left bottom corner of first page text = pdf.pq('LTPage[page_index=0] :in_bbox("100,100,300,300")').text() # save tree as XML to try to figure out why the last line didn't work the way you expected :) pdf.tree.write(filename, pretty_print=True) 

    Если вы хотите найти отдельные символы внутри этого поля, вместо текстовых строк целиком внутри этого поля, передайте merge_tags = None в PDFQuery (по умолчанию он объединяет последовательные символы в один элемент, чтобы сделать дерево менее смешным, поэтому вся строка будет иметь быть внутри коробки). Если вы хотите найти что-либо частично перекрывающее поле, используйте: overlaps_bbox вместо: in_bbox.

    В основном это синтаксис синтаксиса PyQuery для захвата текста из макета PDFMiner, поэтому, если ваш документ слишком грязный для PDFMiner, он может быть слишком грязным для этого, но по крайней мере с ним будет быстрее играть.

    Python - лучший язык программирования в мире.