Как напечатать следующую строку в Python с текстом, извлеченным с помощью pdfplumber

#python #pdfplumber

Вопрос:

Как я могу распечатать следующую строку из текста, извлеченного из PDF-файла, с помощью функции pdfPlumber extract.text?

Я попробовал line.next (), но это не работает.

Фактическое название работы находится в строке после «Название работы». Как показано в примере ниже.

Название должности

Развитие торгового центра Олбани

Мой код, как показано ниже.

 jobName_re = re.compile(r'(Job Name)')
siteAddress_re = re.compile(r'(Wellingtons)(. )')
file = 'invoices.pdf'

lines = []

with pdfplumber.open(file) as myPdf:
    for page in myPdf.pages:
        text = page.extract_text()
        for line in text.split('n'):
            jobName = jobName_re.search(line)
            siteAddress = siteAddress_re.search(line)
            if jobName:
                print('The next line that follows Job Name is', line.next())
            elif siteAddress:
                print(siteAddress.group(1))
 

Комментарии:

1. Что вы подразумеваете под «следующей строкой»? Не могли бы вы показать пример того, какой именно текст вы получаете и какие именно выходные данные вы хотите получить, и объяснить, чем это отличается от ваших существующих выходных данных?

Ответ №1:

У вас есть несколько вариантов.

Вариант 1

Вы можете переключиться на использование целочисленного индекса для циклического просмотра записей:

 lines = text.split('n')
for i in range(len(lines)):
    line = lines[i]
 

Тогда вы сможете получить доступ lines[i 1] .

Вариант 2

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

         last_was_job_heading = False
        for line in text.split('n'):
            siteAddress = siteAddress_re.search(line)
            if last_was_job_heading:
                print('The next line that follows Job Name is', line)
            elif siteAddress:
                print(siteAddress.group(1))
            last_was_job_heading = jobName_re.search(line)
 

Вариант 3

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

Вариант 4

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

Комментарии:

1. Большое тебе спасибо, Мэтью. Первый вариант меня устраивает. Я смог напечатать строку после строки названия работы.