简介
本文将教你如何使用 PyMuPDF 从多栏页面中提取文本。在报纸或科学文章中,经常会遇到文本出现在多栏中的页面。
首先,我们将确保你有一个包含所有必要组件的 Python 编程环境。
对于实际的文本提取,我们将提供所需的 Python 源代码和一些 PDF 示例。当你执行这些程序时,它们将创建文本文件(不同格式),代表所选输入文件中所有页面的内容。
程序如何工作
我们提供了两个工作方式类似的程序。这两个程序都使用 PyMuPDF 或 PyMuPDF4LLM 中实现的函数循环遍历输入 PDF 的所有页面。
PyMuPDF4LLM 基于 PyMuPDF,是一个专门从事文本提取的软件包,尤其适用于 LLM / RAG 环境。在这个软件包中,识别多栏文本的方法已被解决,可以在更多的情况下使用。
准备工作
在真正开始编码之前,我们需要确保所有需要的 Python 组件都已安装。
在计算机上打开一个终端窗口。在该窗口中输入命令:
确保 Python 版本足够高。执行:
python -V
在某些机器上,如 Linux 或 Mac OSX,你可能需要写 python3 而不是 python。在下面的所有内容中,请根据你的机器要求,始终使用 python 或 python3。
回复类似 Python 3.12.3。
我们至少需要 Python 3.9.0。如果你的 Python 是 3.8.x 或更低版本,则必须先升级 Python。
具体如何操作取决于你的操作系统,因此请调查这种不幸情况的详细信息。
假设你的 Python 版本确实符合要求。接下来要确认的是,你的 Python 包含标准安装程序 "pip"。安装 PyMuPDF 和 PyMuPDF4LLM 时需要用到它。
检查终端窗口中的以下命令是否有效:
python3 -m pip –version
如果出现未安装 pip 的错误提示,你必须先安装后才能继续。如果你使用的是 MS Windows 机器,则不会出现这种情况。在 Linux 和 Mac OSX 机器上执行以下命令:
Linux(以 Ubuntu 为例):
sudo apt update
sudo apt install python3-pip
Mac OSX:
python3 -m ensurepip --upgrade
现在,我们就可以进行所需的安装了。
在终端窗口输入以下命令。第一行将确保 Python 安装程序 pip 处于当前级别。
第 2 行将安装 PyMuPDF4LLM,如果需要,还可能安装 PyMuPDF。
python3 -m pip install --upgrade pip
python3 -m pip install pymupdf4llm
下载和执行程序
请将以下文件下载到你选择的文件夹中:
打开一个终端窗口,执行以下命令(再次提醒,如果需要,可以使用 python3 代替):
python markdowntext.py 2col2tables.pdf
python markdowntext.py science-example1.pdf
脚本将为每个 PDF 文档创建与输入文件同名的 Markdown 文本文件,其中后缀名 .pdf 已被后缀名 .md 所替换。
检查代码
代码可能再简单不过了!
9 import pymupdf4llm
10 import pathlib
11 import sys
12
13
14 filename = sys.argv[1] # read filename from command line
15 outname = filename.replace(".pdf", ".md")
16 md_text = pymupdf4llm.to_markdown(filename)
17
18 # output document markdown text as one string
19 pathlib.Path(outname).write_bytes(md_text.encode())
20
请在下面按代码行号查找注释:
即使列数保持不变,上述脚本也能自动识别多页文本列。
你可以将生成的 Markdown 文本文件用于多种用途,例如
检查结果
让我们看看程序是如何读取示例页面的。
在文件 2col2tables.pdf 中,页面从两列开始,然后是一列区域,最后再次回到两列。
图片中的红色矩形和箭头表示提取文本的顺序。
算法检测到 5 个文本块,并发现其中两个区域有两列,一个区域只有一列。
由此确定箭头所示的整体顺序。
请注意:这两个表格是以兼容 GitHub 的 Markdown 表格格式检测和编写的。
下面是第二个示例,文件 science-example1.pdf:
这是一份科学杂志的一页,其中有三列文字,围绕着一张附有说明的图片。图片未被提取。
结论
结合 PyMuPDF 和 PyMuPDF4LLM 的强大功能,PyMuPDF4LLM 提供了广泛的创新文本提取选项,超越了 PyMuPDF 本身。
使用直观的 API,它可以检测并提取多栏页面上的文本和表格,这在杂志和报纸中是很常见的。