当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/347345.html

相关文章:

  • sql update 多表关联 inner join
  • 【OceanBase诊断调优】—— 租户资源统计项及其查询方法
  • 【一键录音,轻松转换:用Python打造个性化音频记录工具】
  • Java类与对象(一)
  • python中的装饰器,例子说明
  • Leetcode经典题目之用队列实现栈
  • DBSCAN聚类算法
  • 【tauri】安装
  • (Java)心得:LeetCode——19.删除链表的倒数第 N 个节点
  • 树莓派安装opencv
  • bert 的MLM框架任务-梯度累积
  • Nginx配置/.well-known/pki-validation/
  • iOS LQG开发框架(持续更新)
  • Python 自动化脚本系列:第3集
  • Matlab-粒子群优化算法实现
  • python 新特性
  • 十一、Redis持久化-RDB、AOF
  • Oracle闪回数据库【Oracle闪回技术】(二)
  • 简单负载均衡
  • Portforge:一款功能强大的轻量级端口混淆工具
  • 1.8. 离散时间鞅-无界停时定理与随机游走
  • Google Pixel4手机刷机+Root+逆向环境详细教程
  • IT项目管理-小题计算【太原理工大学】
  • ARP欺骗使局域网内设备断网
  • Android动画(四):PathMeasure实现路径动画
  • HTTP 连接详解
  • 练习题(2024/5/12)
  • Day50代码随想录动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
  • 【软考】scrum的步骤
  • 【C语言】编译与链接