В любом случае, многопоточный майнинг PDF? - PullRequest
2 голосов
/ 24 октября 2019

У меня есть код, который ищет определенную последовательность строк в куче PDF-файлов. Проблема в том, что этот процесс очень медленный. (Иногда я получаю PDF с более чем 50000 страницами)

Есть ли способ сделать многопоточность? К сожалению, даже несмотря на то, что я искал, я не мог разобраться с кодами потоков

import os
import shutil as sh
f = 'C:/Users/akhan37/Desktop/learning profiles/unzipped/unzipped_files'

import slate3k as slate


idee = "123456789"
os.chdir(f)
for file in os.listdir('.'):
    print(file) 
    with open(file,'rb') as g:
        extracted_text = slate.PDF(g)

            #extracted_text = slate.PDF() 

        # print(Text)
        if idee in extracted_text:
            print(file)
        else:
            pass

Время выполнения очень большое. Я не думаю, что это ошибка кода, а скорее факт, что мне нужно пройти более 700 PDF

1 Ответ

2 голосов
/ 24 октября 2019

Я бы предложил использовать pdfminer, вы можете преобразовать в объект документа в список объекта страницы, который вы можете обрабатывать несколькими ядрами.

    fp = open(pdf_path, "rb")
    parser = PDFParser(fp)
    document = PDFDocument(parser, password)
    if not document.is_extractable:
        raise PDFTextExtractionNotAllowed

    laparams = LAParams() # set
    resource_manager = PDFResourceManager()
    device = PDFPageAggregator(resource_manager, laparams=laparams)
    interpreter = PDFPageInterpreter(resource_manager, device)

    all_attributes = []

    list_of_page_obj = list(PDFPage.create_pages(document))
...