Объединить все страницы PDF в один текст с PDFMiner для Python - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь объединить все страницы PDF-файла в один текст и сохранить этот текст в JSON-файл.

У меня нет проблем, но он извлекает текст только с первой страницы PDF-файла.

Как я могу перебрать PDF-файл и добавить текст в JSON-файл? Спасибо за ваши подсказки.

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io
from io import StringIO
from io import BytesIO
import os
import glob
import json

pdf_path = 'pdfs' 
pdfFiles = [os.path.join(pdf_path, f) for f in os.listdir(pdf_path) if f.endswith(".pdf") if os.path.isfile(os.path.join(pdf_path, f))]

extractTextFromPdf(pdfFiles[0])

def extractTextFromPdfByPage(pdf_path):
 with open(pdf_path, 'rb') as fh:
    resourceManager = PDFResourceManager()
    returnString = StringIO()
    codec = 'utf-8'
    laParams = LAParams()
    device = TextConverter(resourceManager, returnString, codec=codec, laparams=laParams)

    filename = os.path.splitext(os.path.basename(pdf_path))[0]

    for page in PDFPage.get_pages(fh, 
                                  caching=True,
                                  check_extractable=True):
        resource_manager = PDFResourceManager()
        fake_file_handle = io.StringIO()
        converter = TextConverter(resource_manager, fake_file_handle)
        page_interpreter = PDFPageInterpreter(resource_manager, converter)
        page_interpreter.process_page(page)

        text = fake_file_handle.getvalue()
        yield text

        converter.close()
        fake_file_handle.close()

        data = {'id': filename, 'text': text}

        json_path = 'stage0.json'

        with open(json_path, 'w') as fh:
            json.dump(data, fh)

        return text

    device.close()
    returnString.close()

def extractTextFromPdf(pdf_path):
    for page in extractTextFromPdfByPage(pdf_path):
        print(page)
        print()
...