Проблемы с PyMuPDF извлечения простого текста
Я хочу читать в PDF-файл, используя PyMuPDF. Все, что мне нужно, это простой текст (не нужно извлекать информацию о цвете, шрифтах, таблицах и т. Д.).
Я пробовал следующее
import fitz
from fitz import TextPage
ifile = "C:\\user\\docs\\aPDFfile.pdf"
doc = TextPage(ifile)
>>> TypeError: in method 'new_TextPage', argument 1 of type 'struct fz_rect_s *'
Что не работает, так что я попытался
doc = fitz.Document(ifile)
t = TextPage.extractText(doc)
>>> AttributeError: 'Document' object has no attribute '_extractText'
что опять не работает.
Затем я нашел отличный блог от одного из авторов PyMuPDF, в котором есть подробный код для извлечения текста в порядке его чтения из файла. Но каждый раз, когда я запускаю этот код с другим PDF, я получаю KeyError: 'lines'
(строка 81 в коде) или KeyError: "bbox"
(строка 60 в коде).
Я не могу публиковать PDF-файлы здесь, потому что они являются конфиденциальными, и я ценю, что это была бы полезная информация, чтобы иметь здесь. Но есть ли способ, которым я могу просто выполнить простейшую задачу, которую должен выполнять PyMuPDF: извлечь простой текст из PDF, неупорядоченный или каким-либо другим (я не против)?
4 ответа
Сообщение от сопровождающего репо:
Самый простой способ извлечь простой текст, но при этом выполнить хотя бы базовое упорядочение:
blocks = page.getText("blocks")
blocks.sort(key=lambda block: block[1]) # sort vertically ascending
for b in blocks:
print(b[4]) # the text part of each block
Процесс извлечения текста по вашему примеру с использованием PyMuPDF:
import fitz
ifile = "C:\\user\\docs\\aPDFfile.pdf"
doc = fitz.open(ifile)
page_count = doc.pageCount
page = 0
text = ''
while (page < page_count):
p = doc.loadPage(page)
page += 1
text = text + p.getText()
print(text)
Блог, за которым вы следите, великолепен, но немного устарел, некоторые методы устарели.
import fitz
filepath = "C:\\user\\docs\\aPDFfile.pdf"
text = ''
with fitz.open(filepath ) as doc:
for page in doc:
text+= page.get_text()
print(text)
используйте маленькую Т вgettext()
:
import fitz
filepath = "C:\\user\\docs\\aPDFfile.pdf"
text = ''
with fitz.open(filepath ) as doc:
for page in doc:
text+= page.gettext()
print(text)
это работа для тебя