Проблемы с 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)

это работа для тебя

Другие вопросы по тегам