pdf 文件版面分析--PyMuPDF (python 文档解析提取)

1.介绍

PyMuPDF 和Fitz 是用于Python中处理PDF文件的相关模块。Fitz是P有MuPDF的字模块。提供一个简化和封装版本的P有MuPDF功能。

关系:
  • PyMuPDF: 提供广泛的功能,用于操作PDF文档, 包括方便的高级函数与底层操作
  • Fitz :简化和封装了PyMuPDF的功能,使在python中处理PDF文件更加简单

2. 基本操作

获取PDF的文档基本信息

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import fitz

pdf_path = 'rag_datas/text.pdf'
doc = fitz.open(pdf_path) # 文件加载

# basic PDF info
title = doc.metadata['title']
author= doc.metadata['author']# 文档作者
create_data= doc.metadata['creationDate']   # 文档创建时间
num_pages = doc.page_count # 文档页数
page = doc.load_page(0) # 第一页
page_height = page.bound().height 
page_width = page.bound().width

获取pdf文档中的文本

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import fitz

pdf_path = 'rag_datas/text.pdf'
doc = fitz.open(pdf_path) # 文件加载
num_pages = doc.page_count # 文档页数

# Text info of pdf
for page_index in range(num_pages ):
	page = doc.load_page(page_index)# 获取页面内容
	text = page.get_text()# 获取页面文本
	print(f"第{page_index + 1} 页的文本内容为:\n{text }\n")

获取pdf文档中的图片

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import fitz

pdf_path = 'rag_datas/text.pdf'
doc = fitz.open(pdf_path) # 文件加载
num_pages = doc.page_count # 文档页数

# Image info of pdf
for page_index in range(num_pages ):
	page = doc.load_page(page_index)# 获取页面内容
	image_list = page.get_images()# 获取页面图片
	print(image_list) # 图片基本信息
	for img in image_list:
		xref = img[0]
		pix = fitz.Pixmap(doc, xref)
		print(pix.colorspace, '-->', fitz.csRGB)
		img_path f'../output/image{page_index + 1}_{xref}.png'
		pix.save(img_path )

获取pdf文档中的表格

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import fitz

pdf_path = 'rag_datas/text.pdf'
doc = fitz.open(pdf_path) # 文件加载
num_pages = doc.page_count # 文档页数

# tables info of pdf
for page_index in range(num_pages ):
	page = doc.load_page(page_index)# 获取页面内容
	tables = page.find_tables()# 获取页面表格
	print(f"tables: "{tables})
	# 提取的表格数据将会保存为csv格式文件
	for i, table in enumerate(tables):
		df = tables[0].to_pandas()
		print(df.head())
		df.to_csv(f"../output/table_pd_{page_index}_{i+1}.csv", index=False)	

获取pdf 文档 分割

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import fitz

pdf_path = 'rag_datas/text.pdf'
doc = fitz.open(pdf_path) # 文件加载
num_pages = doc.page_count # 文档页数
# 构建输出文件名,以页数命名
# 
for i in range(1, num_pages ):
	print(f"i"{i}")
	# 创建一个新的Document对象,包含当前页面
	new_pdf = fitz.open()
	new_pdf.insert_pdf(pdf_document. from_page=i-1, to_page=i)
	# 保存单独的PDF文件
	new_pdf.save(output_pdf.format(i))
	new_pdf.close()
    pdf_document.close()

借助大模型进行文档问答

python 复制代码
# -*- coding: utf-8 -*-
# PyMuPDF==1.23.26
import os
import fitz
from openai import OpenAI

def get_pdf_content(pdf_path:str)-> str:
	doc = fitz.open(pdf_path)
	num_pages = doc.page_count
	bg_content_list = []
	#Full Text of PDF
	for page_index in range(num_pages):
		page = doc.load_page(page_index)
		text = page.get_text()
		bg_content_list.append(text)
	return ''.join(bg_content_list)

def get_answer(pdf_content: str, query:str) -> str:
	client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
	response = clinet.chat.completions.create(
					model = "gpt-3.5-turbo",
					messages=[
						{"role":"system","content":"You are a helpful assistant."},
						{"role":"user","content":"f"The full text of PDF file is : {pdf_content}"},
						{"role":"user","content":query}
						],
					max_tokens=1000
				)
	answer = response.choices[0].message.content
	return answer

if __name__=="__main__":
    content = get_pdf_content("rag_datas/text.pdf")
    query_1 = '蚂蚁集团发布的大模型叫什么?'
    print(get_answer(pdf_content = content, query=query_1 ))
	
	query_2 = '混元大模型是什么时候发布的?'
    print(get_answer(pdf_content = content, query=query_2 ))

参考:
版面分析--PDF解析神器PyMuPDF

github: https://github.com/pymupdf/PyMuPDF

官方文档:https://pymupdf.readthedocs.io/en/latest/tutorial.html

相关推荐
忧陌6061 小时前
Day22打卡-复习
python
Sylvan Ding2 小时前
PyTorch Lightning实战 - 训练 MNIST 数据集
人工智能·pytorch·python·lightning
水银嘻嘻2 小时前
web 自动化之 Unittest 应用:报告&装饰器&断言
前端·python·自动化
攻城狮7号2 小时前
Python爬虫第20节-使用 Selenium 爬取小米商城空调商品
开发语言·数据库·爬虫·python·selenium
虚空之月&&轮舞者4 小时前
Python与矢量网络分析仪3671E:自动化测试(Vscode)
网络·vscode·python·射频工程
李昊哲小课4 小时前
tensorflow-cpu
大数据·人工智能·python·深度学习·数据分析·tensorflow
小彭律师10 小时前
数字化工厂中央控制室驾驶舱系统架构文档
python
TextIn智能文档云平台11 小时前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
图像处理·人工智能·算法·自然语言处理·pdf·ocr
old_power11 小时前
【Python】PDF文件处理(PyPDF2、borb、fitz)
python·pdf
测试开发Kevin11 小时前
从投入产出、效率、上手难易度等角度综合对比 pytest 和 unittest 框架
python·pytest