PyMuPDF 提取纯文本的问题

PyR*_*red 6 python pdf pymupdf

我想使用PyMuPDF读取 PDF 文件。我需要的只是纯文本(不需要提取颜色、字体、表格等信息)。

我尝试过以下方法

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 *'
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我尝试了

doc = fitz.Document(ifile)
t = TextPage.extractText(doc)
>>> AttributeError: 'Document' object has no attribute '_extractText'
Run Code Online (Sandbox Code Playgroud)

这又不起作用了。

然后我发现了PyMuPDF 的一位作者写的很棒的博客,其中包含按照从文件中读取的顺序提取文本的详细代码。但每次我用不同的 PDF 运行此代码时,我都会得到KeyError: 'lines'(代码中的第 81 行)或KeyError: "bbox"(代码中的第 60 行)。

我无法在这里发布 PDF,因为它们是机密的,我很高兴在这里提供有用的信息。但是有什么方法可以让我完成 PyMuPDF 要做的最简单的任务:从 PDF 中提取纯文本,无序或其他(我不太介意)?

Vas*_*sko 9

按照您的示例使用 PyMuPDF 提取文本的过程是:

import fitz

filepath = "C:\\user\\docs\\aPDFfile.pdf"

text = ''
with fitz.open(filepath ) as doc:
    for page in doc:
        text+= page.getText()
print(text)
Run Code Online (Sandbox Code Playgroud)

你关注的博客很棒,但是有点过时,有些方法已经贬值了。


Jor*_*Kie 9

来自回购维护者的消息:

提取纯文本但仍至少进行基本排序的最简单方法是

blocks = page.get_text("blocks")
blocks.sort(key=lambda block: block[1])  # sort vertically ascending

for b in blocks:
    print(b[4])  # the text part of each block
Run Code Online (Sandbox Code Playgroud)

在较新的版本(1.19.x 及更高版本)中,上述内容甚至更简单:只需执行text = page.get_text(sort=True). 它将以字符串形式返回整页文本以及从左上到右下的基本阅读顺序。