摘要
常常有针对pdf进行文本分析的需求,以下给出了多种读取pdf中文字的方法
方法一 pypdf2
pip install PyPDF2
import PyPDF2
# 遍历某个文件夹下的所有pdf文件
def read_pdf_text(filename):
with open(
filename, 'rb',
# encoding='utf-8'
) as file:
# 创建一个PDF阅读器对象
reader = PyPDF2.PdfReader(file)
res = []
# 遍历PDF中的每一页
for page_num in range(len(reader.pages)):
# 获取当前页面的文本内容
text = reader.pages[page_num].extract_text()
res.append(text)
return res
方法二 PyMuPDF
安装:pip install PyMuPDF
下图是PyPDF2
和 PyMuPDF
,读取PDF的一个对比图:
PyPDF2
读取文本其中会参杂很多换行符\n
,会破坏句子和段落间的结构。
结果显然易见,PyMuPDF
的效果更好一点。
注意:如上图所示,每页的开头是PDF页面的页码数
import fitz # 这是PyMuPDF的别名
pdf_file = fitz.open(pdf_path) # pdf_path是PDF文件的路径
res = []
for i in range(len(pdf_file)):
page = pdf_file.load_page(i)
res.append(page.get_text())
以下是删除文章页码的代码仅供参考
import re
new_res = []
for p in res:
# 删除文章页码
text = re.sub('^[\dIV]+\n', '', p) # 去除以阿拉伯数字和罗马数字开头后面接换行符的文本
new_res.append(text)
下图展示了删除页码之前和之后的对比
方法三 langchain
安装:pip install pypdf
有人可能会使用langchain结合大模型,下述给出langchain
读取PDF文本的代码
langchain读取PDF的效果和
PyPDF2
相当,不如PyMuPDF
好
def pdf_load(filename):
# pip install pypdf
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(filename)
return loader.load_and_split()
res = pdf_load(filename)
print(res)