Как извлечь весь текст из PDF с помощью индексации - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в Python и кодировании в целом. Я пытаюсь создать программу, которая будет распознавать каталог PDF-файлов, а затем извлекать текст, чтобы позже я мог выбирать определенные c вещи. Однако мне не удается заставить pdfPlumber извлечь весь текст со всех страниц. Вы можете индексировать от начала до конца, но если конец неизвестен, он прерывается, потому что индекс выходит за пределы допустимого диапазона. PDF. Я хочу извлечь весь текст из каждого PDF-файла, но pdfPlumber сломается, если мой индекс окажется слишком большим, и я не знаю, сколько страниц будет в PDF-файле. Я пробовал

page = pdf.pages[0--1]

, но это тоже не работает. Мне также не удалось найти обходной путь с PyPDF2. Прошу прощения, если это неряшливый или нечитаемый код. Я попытался добавить комментарии, чтобы объяснить, что я делаю.

1 Ответ

1 голос
/ 09 июля 2020

Страница pdfplumber git говорит, что pdfplumber.open возвращает экземпляр класса pdfplumber.PDF.

Этот экземпляр имеет свойство pages, которое представляет собой список pdfplumber.Page экземпляров - по одному на Page, загруженных из вашего pdf. Посмотрев на свой код, вы увидите:

total_pages = len(pdf.pages)

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

Чтобы объединить весь текст pdf в одну гигантскую текстовую строку, вы могли бы попробуйте операцию "for in". Попробуйте изменить существующий код:

for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith('.pdf'):
        with pdfplumber.open(file) as pdf:
            page = pdf.pages[0]
            text = page.extract_text()
            print(text)  

To:

for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith('.pdf'):
        all_text = '' # new line
        with pdfplumber.open(file) as pdf:
            # page = pdf.pages[0] - comment out or remove line
            # text = page.extract_text() - comment out or remove line
            for pdf_page in pdf.pages:
               single_page_text = pdf_page.extract_text()
               print( single_page_text )
               # separate each page's text with newline
               all_text = all_text + '\n' + single_page_text
            print(all_text)
            # print(text) - comment out or remove line  

Вместо того, чтобы использовать значение индекса страницы pdf.page[0] для доступа к отдельным страницам, используйте for pdf_page in pdf.pages. Он прекратит цикл после того, как достигнет последней страницы без создания исключения. Вам не придется беспокоиться об использовании значения индекса, выходящего за пределы допустимого диапазона.

...