У меня есть большой каталог с файлами PDF (изображения), как я могу эффективно извлечь текст из всех файлов внутри каталога?. Пока я пытался:
import multiprocessing
import textract
def extract_txt(file_path):
text = textract.process(file_path, method='tesseract')
p = multiprocessing.Pool(2)
file_path = ['/Users/user/Desktop/sample.pdf']
list(p.map(extract_txt, file_path))
Однако он не работает... это занимает много времени (у меня есть документы с 600 страницами). Кроме того: a) Я не знаю, как эффективно обрабатывать часть преобразования каталога. b) Я хотел бы добавить разделитель страниц, скажем: <start/age = 1> ... page content ... <end/page = 1>
, но я не знаю, как это сделать.
Таким образом, как я могу применить функцию extract_txt
ко всем элементам каталога, которые заканчиваются на .pdf
, и возвращать те же файлы в другом каталоге, но в формате .txt
, и добавить разделитель страниц с помощью OCR удаление текста?.
Кроме того, я был заинтересован в использовании документов Google для выполнения этой задачи, можно ли программным образом использовать документы Google для решения вышеупомянутой проблемы с извлечением текста?
UPDATE
Что касается вопроса "Добавление разделителя страниц" (<start/age = 1> ... page content ... <end/page = 1>
) после прочтения ответа Роланда Смита, я попытался:
from PyPDF2 import PdfFileWriter, PdfFileReader
import textract
def extract_text(pdf_file):
inputpdf = PdfFileReader(open(pdf_file, "rb"))
for i in range(inputpdf.numPages):
w = PdfFileWriter()
w.addPage(inputpdf.getPage(i))
outfname = 'page{:03d}.pdf'.format(i)
with open(outfname, 'wb') as outfile: # I presume you need `wb`.
w.write(outfile)
print('\n<begin page pos =' , i, '>\n')
text = textract.process(str(outfname), method='tesseract')
os.remove(outfname) # clean up.
print(str(text, 'utf8'))
print('\n<end page pos =' , i, '>\n')
extract_text('/Users/user/Downloads/ImageOnly.pdf')
Однако у меня все еще есть проблемы с частью print()
, так как вместо печати было бы более полезно сохранить в файл весь вывод. Таким образом, я попытался перенаправить вывод в файл:
sys.stdout=open("test.txt","w")
print('\n<begin page pos =' , i, '>\n')
sys.stdout.close()
text = textract.process(str(outfname), method='tesseract')
os.remove(outfname) # clean up.
sys.stdout=open("test.txt","w")
print(str(text, 'utf8'))
sys.stdout.close()
sys.stdout=open("test.txt","w")
print('\n<end page pos =' , i, '>\n')
sys.stdout.close()
Любая идея, как сделать трюк извлечения/разделения страниц и сохранить все в файл?...