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

2024-05-06 00:12

本文主要是介绍PDF解析--PyMuPDF (python 文档解析提取),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.介绍

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

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

2. 基本操作

获取PDF的文档基本信息

# -*- 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文档中的文本

# -*- 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文档中的图片

# -*- 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文档中的表格

# -*- 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 文档 分割

# -*- 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()

借助大模型进行文档问答

# -*- 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

这篇关于PDF解析--PyMuPDF (python 文档解析提取)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963032

相关文章

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re