PDF解析--PyMuPDF (python 文档解析提取)

embedded/2024/9/22 18:20:02/

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 fitzpdf_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 fitzpdf_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 fitzpdf_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 fitzpdf_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 fitzpdf_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 OpenAIdef get_pdf_content(pdf_path:str)-> str:doc = fitz.open(pdf_path)num_pages = doc.page_countbg_content_list = []#Full Text of PDFfor 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.contentreturn answerif __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


http://www.ppmy.cn/embedded/34180.html

相关文章

java里的i/o流

在Java中,I/O(输入/输出)流是用于处理输入和输出操作的抽象概念。Java的I/O库提供了许多类和方法,用于从各种来源(如文件、网络、内存等)读取数据(输入流),以及将数据写入…

安卓中常见的UI控件

TextView(文本视图)EditText(编辑文本)Button(按钮)ImageView(图像视图)ImageButton(图像按钮)CheckBox(复选框)RadioButton&#xff…

银行智能化数据安全分类分级实践分享

文章目录 前言一、数据安全智能分类分级平台建设背景二、数据安全分类分级建设思路和实践1、做标签– 数据安全标签体系2、打标签– 鹰眼智能打标平台 3.03、用标签– 全行统一“数据安全打标签结果”服务提供前言 随着国家对数据安全的高度重视,以及相关法律法规的出台,数据…

全方位了解 Meta Llama 3

本文将为您提供 Llama 3 的全面概览,从其架构、性能到未来的发展方向,让您一文了解这一革命性大语言模型的所有要点。 Meta Llama 发展历程 Llama 1 Llama 是由 Meta(FaceBook) AI 发布的一个开源项目,允许商用,影响力巨大。Lla…

数据存储-SQLite

一般使用到数据库存储,涉及到的数据量都较大,采用文件存储也能完成,但是文件操作复杂,效率低,大量结构化数据通常采用关系型数据库存储较为合适。Android中已经嵌入了轻量级的关系型数据库SQLite,直接按照数…

自制AI:Park_01修改bug

修改了一下不能存东西&#xff0c;不能打开东西的bug #include<bits/stdc.h> #include<windows.h> using namespace std; double mem10737418240; map<string,string> jishiben; string mulu"朴同学给你的一封信.memo\n"; int cntnote1; void sta…

知识图谱和大语言模型的共存之道

导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织新KG视点系列文章—…

FFmpeg学习记录(四)——SDL音视频渲染实战

1.SDL使用的基本步骤 SDL Init/sDL _Quit()SDL_CreateWindow()/SDL_DestoryWindow()SDL CreateRender() SDL_Windows *windows NULL;SDL_Init(SDL_INIT_VIDEO);window SDL_CreateWindow("SDL2 Windows",200,200, 640,480,SDL_WINDOW_SHOWN);if(!window) {printf(&…