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 中提取纯文本,无序或其他(我不太介意)?
按照您的示例使用 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)
你关注的博客很棒,但是有点过时,有些方法已经贬值了。
来自回购维护者的消息:
提取纯文本但仍至少进行基本排序的最简单方法是
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). 它将以字符串形式返回整页文本以及从左上到右下的基本阅读顺序。