Извлечение текста на основе его координат из преобразования нескольких файлов PDF из папки с помощью pdfminer - PullRequest
0 голосов
/ 25 мая 2018

Я хочу извлечь текст на основе его координат из преобразования нескольких файлов PDF из папки с помощью pdfminer и сохранения моего результата в списке или словаре.Сначала мне удалось преобразовать один файл, и я смог извлечь текст на основе его координат.

Я должен сказать, что я не очень хорош в Python, но я стараюсь изо всех сил.Очень признателен, если кто-нибудь подскажет, как исправить следующий код:

import os
import glob
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
import pdfminer
from cStringIO import StringIO


directory = os.path.abspath('./')
pdfFiles = glob.glob(os.path.join(directory, '*.pdf'))

resourceManager = PDFResourceManager()
returnString = StringIO()
codec = 'utf-8'
laParams = LAParams()
device = PDFPageAggregator(resourceManager, laparams=laParams)
interpreter = PDFPageInterpreter(resourceManager, device)


maxPages = 0
caching = True
pageNums=set()

for one_pdf in pdfFiles:
    print("Processing file: " + str(one_pdf))
    fp = file(one_pdf, 'rb')
    name = "one_pdf"

    lst =[]
    def parse_obj(lt_objs):
        for one_pdf in enumerate(pdfFiles):
            for obj in lt_objs:
                if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal):
                    print "%6d, %6d, %s" % (obj.bbox[0], obj.bbox[1], obj.get_text().replace('\n', '_'))
                    lst.append([one_pdf,[[obj.bbox[0],obj.bbox[1]], obj.get_text()]])

                elif isinstance(obj, pdfminer.layout.LTFigure):
                    parse_obj(obj._objs)

    for page in PDFPage.get_pages(fp, pageNums, maxpages=maxPages,caching=caching, check_extractable=True):

            interpreter.process_page(page)
            layout = device.get_result()

            parse_obj(layout._objs)

device.close()
returnString.close()

Код выводит имя PDF-файла в данной папке, за которым следует текстовый макет PDF.Здесь я не смог успешно сохранить результат во вложенном списке или словаре словарей.

1 Ответ

0 голосов
/ 04 июня 2018

Думаю, я выяснил, как хранить имена pdf в качестве ключей и их содержимое вместе с координатами содержимого в словаре (pdf_dict).

lst=[]
dicts_from_file =[]
pdf_dict = {}

for one_pdf in pdfFiles:
#print("Processing file: " + str(one_pdf))
fp = file(one_pdf, 'rb')
name = str(one_pdf)
head, tail = os.path.split(name)
dicts_from_file.append({tail})

def parse_obj(lt_objs):
    for obj in lt_objs:
        if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal):
            lst.append([[obj.bbox[0],obj.bbox[1]],obj.get_text().replace('\n', '')])
            pdf_dict.update( {tail : lst} )


        elif isinstance(obj, pdfminer.layout.LTFigure):
            parse_obj(obj._objs)
            return []

for page in PDFPage.get_pages(fp, pageNums, maxpages=maxPages, password=password,caching=caching, check_extractable=True):
    interpreter.process_page(page)
    layout = device.get_result()

    parse_obj(layout._objs)

device.close()
returnString.close()
...