Python - Как преобразовать много отдельных PDF-файлов в текст?

Вопрос: Как я могу читать во многих PDF-файлах по одному и тому же пути, используя пакет Python "slate"?

У меня есть папка с более чем 600 PDF-файлов.

Я знаю, как использовать пакет Slate для преобразования отдельных PDF-файлов в текст, используя этот код:

migFiles = [filename for filename in os.listdir(path)
if re.search(r'(.*\.pdf$)', filename) != None]
with open(migFiles[0]) as f:
     doc = slate.PDF(f)

 len(doc)

Тем не менее, это ограничивает вас одним PDF-файлом за один раз, определяемым как "migFiles[0]" - 0 является первым PDF-файлом в моем пути.

Как я могу читать во многих PDF-файлах текст сразу, сохраняя их в виде отдельных строк или текстовых файлов? Должен ли я использовать другой пакет? Как я могу создать цикл for для чтения всех PDF-файлов в пути?

2 ответа

Попробуйте эту версию:

import glob
import os

import slate

for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")):
   with open(pdf_file) as pdf:
        txt_file = "{}.txt".format(os.path.splitext(pdf_file)[0])
        with open(txt_file,'w') as txt:
             txt.write(slate.pdf(pdf))

Это создаст текстовый файл с тем же именем, что и pdf, в том же каталоге, что и pdf-файл с преобразованным содержимым.

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

import glob
import os

import slate

pdf_as_text = {}

for pdf_file in glob.glob("{}/{}".format(path,"*.pdf")):
   with open(pdf_file) as pdf:
        file_without_extension = os.path.splitext(pdf_file)[0]
        pdf_as_text[file_without_extension] = slate.pdf(pdf)

Теперь вы можете использовать pdf_as_text['somefile'] чтобы получить текстовое содержание.

Что вы можете сделать, это использовать простой цикл:

docs = []
for filename in migFiles:
   with open(filename) as f:
     docs.append(slate.pdf(f)) 
     # or instead of saving file to memory, just process it now

Затем docs[i] будет содержать текст (i+1)-го pdf-файла, и вы можете делать с ним все, что захотите. Кроме того, вы можете обработать файл внутри цикла for.

Если вы хотите преобразовать в текст, вы можете сделать:

docs = []
separator = ' ' # The character you want to use to separate contents of
#  consecutive pages; if you want the contents of each pages to be separated 
# by a newline, use separator = '\n'
for filename in migFiles:
   with open(filename) as f:
     docs.append(separator.join(slate.pdf(f))) # turn the pages into plain-text

или же

separator = ' ' 
for filename in migFiles:
   with open(filename) as f:
     txtfile = open(filename[:-4]+".txt",'w')
     # if filename="abc.pdf", filename[:-4]="abc"
     txtfile.write(separator.join(slate.pdf(f)))
     txtfile.close()
Другие вопросы по тегам