Есть ли способ читать PDF-файлы построчно? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть PDF-файл более 100 страниц. Есть поля и столбцы текста. Когда я извлекаю текст, используя PyPdf2 и парсер тики, я получаю строку данных, которая не в порядке. Во многих случаях он упорядочен по столбцам, а в других случаях пропускается по документу. Можно ли прочитать PDF-файл, начиная сверху, двигаясь слева направо до нижней части? Я хочу прочитать текст в столбцах и полях, но хочу, чтобы строка текста отображалась так, как она читается слева направо.

Я пробовал: PyPDF2 - единственный инструмент это extracttext (). Быстро, но не дает пробелов в элементах. Результаты перемешаны.

Pdfminer - метод PDFPageInterpeter () с помощью LAParams. Это работает хорошо, но медленно. По крайней мере, 2 секунды на страницу, и у меня есть 200 страниц.

pdfrw - это только говорит мне количество страниц.

tabula_py - только дает мне первую страницу. Может быть, я не зацикливаюсь правильно.

Тика - с чем я сейчас работаю. Быстро и более читабельно, но содержимое все еще перемешано.

from tkinter import filedialog
import os
from tika import parser
import re

# select the file you want 
file_path = filedialog.askopenfilename(initialdir=os.getcwd(),filetypes=[("PDF files", "*.pdf")])
print(file_path) # print that path
file_data = parser.from_file(file_path) # Parse data from file
text = file_data['content'] # Get files text content
by_page = text.split('... Information') # split up the document into pages by string that always appears on the
                                    # top of each page

for i in range(1,len(by_page)): # loop page by page
    info = by_page[i] # get one page worth of data from the pdf
    reformated = info.replace("\n", "&") # I replace the new lines with     "&" to make it more readable
    print("Page: ",i) # print page number
    print(reformated,"\n\n") # print the text string from the pdf

Это обеспечивает вывод вида, но он не упорядочен так, как мне хотелось бы. Я хочу, чтобы PDF читался слева направо. Кроме того, если бы я мог получить чистое решение Python, это было бы бонусом. Я не хочу, чтобы мои конечные пользователи были вынуждены устанавливать Java (я думаю, что методы tika и tabula-py зависят от java).

1 Ответ

0 голосов
/ 14 июня 2019

Я сделал это для .docx с этим кодом. Где TXT. DOCX. Надеюсь, что эта помощь ссылка

import re
pttrn = re.compile(r'(\.|\?|\!)(\'|\")?\s')
new = re.sub(pttrn, r'\1\2\n\n', txt)

print(new)
...