gptpdf:使用大模型(如 GPT-4o)将 PDF 解析为 markdown。

今天给大家分享一个开源的项目, 使用视觉大语言模型(如 GPT-4o)将 PDF 解析为 markdown。

方法非常简单(只有293行代码),但几乎可以完美地解析排版、数学公式、表格、图片、图表等。

使用 GeneralAgent lib 与 OpenAI API 交互。 每页平均价格:0.013 美元

pdfgpt-ui 是一个基于 gptpdf 的可视化工具。

处理流程

  1. 使用 PyMuPDF 库,对 PDF 进行解析出所有非文本区域,并做好标记,比如:

  1. 使用视觉大模型(如 GPT-4o)进行解析,得到 markdown 文件。

样例

有关 PDF,请参阅 examples/attention_is_all_you_need/output.md

安装

pip install gptpdf

使用

from gptpdf import parse_pdfapi_key = 'Your OpenAI API Key'
content, image_paths = parse_pdf(pdf_path, api_key=api_key)
print(content)

更多内容请见 test/test.py

API

def parse_pdf(pdf_path: str,output_dir: str = './',prompt: Optional[Dict] = None,api_key: Optional[str] = None,base_url: Optional[str] = None,model: str = 'gpt-4o',verbose: bool = False,gpt_worker: int = 1
) -> Tuple[str, List[str]]:

将 PDF 文件解析为 Markdown 文件,并返回 Markdown 内容和所有图片路径列表。

参数

  • pdf_pathstr
    PDF 文件路径

  • output_dirstr,默认值:'./'
    输出目录,存储所有图片和 Markdown 文件

  • api_key:*Optional[str]*,可选
    OpenAI API 密钥。如果未提供,则使用 OPENAI_API_KEY 环境变量。

  • base_url:*Optional[str]*,可选
    OpenAI 基本 URL。如果未提供,则使用 OPENAI_BASE_URL 环境变量。可以通过修改该环境变量调用 OpenAI API 类接口的其他大模型服务,例如GLM-4V

  • modelstr,默认值:'gpt-4o'。OpenAI API 格式的多模态大模型。如果需要使用其他模型,例如

    • qwen-vl-max

    • GLM-4V

    • Yi-Vision

    • Azure OpenAI,通过将 base_url 指定为 https://xxxx.openai.azure.com/ 来使用 Azure OpenAI,api_key 是 Azure API 密钥,模型类似于 azure_xxxx,其中 xxxx 是部署的模型名称(已测试)。

  • verbosebool,默认值:False,详细模式,开启后会在命令行显示大模型解析的内容。

  • gpt_workerint,默认值:1
    GPT 解析工作线程数。如果您的机器性能较好,可以适当调高,以提高解析速度。

  • prompt: dict, 可选,如果您使用的模型与本仓库默认的提示词不匹配,无法发挥出最佳效果,我们支持自定义加入提示词。 仓库中,提示词分为三个部分,分别是:

    • prompt:主要用于指导模型如何处理和转换图片中的文本内容。

    • rect_prompt:用于处理图片中标注了特定区域(例如表格或图片)的情况。

    • role_prompt:定义了模型的角色,确保模型理解它在执行PDF文档解析任务。 您可以用字典的形式传入自定义的提示词,实现对任意提示词的替换,这是一个例子:

    prompt = {"prompt": "自定义提示词语","rect_prompt": "自定义提示词","role_prompt": "自定义提示词"
    }content, image_paths = parse_pdf(pdf_path=pdf_path,output_dir='./output',model="gpt-4o",prompt="",verbose=False,
    )

    您不需要替换所有的提示词,如果您没有传入自定义提示词,仓库会自动使用默认的提示词。默认提示词使用的是中文,如果您的PDF文档是英文的,或者您的模型不支持中文,建议您自定义提示词。

版本

  • 0.0.9~0.0.10: 优化 PDF 解析流程,解析效果更好

  • 0.0.2 - 0.0.8: 添加 gpt_worker 参数;添加 GLM-4V、Azure OpenAI 支持;修复一些 bug

  • 0.0.1: 第一个版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力

香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力 一、香橙派AIpro开箱使用体验 1.1香橙派AIpro开箱 拿到板子后第一件事情就是开箱: 开箱后可以看见一个橘子的标识,也就是香橙派了,并且还有四个大字:为AI…

RABBITMQ的本地测试证书生成脚本

由于小程序要求必须访问wss的接口,因此需要将测试环境也切换到https,看了下官方的文档 RabbitMQ Web STOMP Plugin | RabbitMQ里面有这个信息 然后敲打GPT一阵子,把要求输入几个来回,得到这样一个脚本: generate_cer…

双向带头循环链表

一、概念 何为双向:此链表每一个节点的指针域由两部分组成,一个指针指向下一个节点,另一个指针指向上一个节点,并且两头的节点也是如此,头节点的下一个节点是尾节点,尾节点的上一个节点是头节点&#xff1b…

R语言实战——栅格聚合方法(超方便)

今天给大家分享一个栅格聚合方法,使用R语言实现! 1 为什么要做栅格聚合 栅格数据是我们地理学使用最广泛的数据类型之一。所谓栅格聚合其实就是根据栅格数据进行一系列运算得到一个我们想要的数据。 我个人认为,应用最广泛的,可…

notepad++中文出现异体汉字,怎么改正

notepad显示异体字,如何恢复? 比如 “门” 和 “直接” 的"直"字,显示成了 方法 修改字体, 菜单栏选择 Settings(设置),Style Configurator…(语言格式设置…)&#xf…

SSM城镇居民社区再生资源回收系统-计算机毕业设计源码04175

摘 要 本论文介绍了一个基于SSM(Spring Spring MVC MyBatis)技术的城镇居民社区再生资源回收系统的设计与实现。随着社会对环境保护意识的不断提高,再生资源回收成为了一种重要的环保行动。然而,传统的再生资源回收方式存在着信…

[数仓]十二、离线数仓(Atlas元数据管理)

第1章 Atlas入门 1.1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例…

springboot3——项目部署

springboot的项目开发完了,怎么样把他放到服务器上或者生产环境上让他运行起来跑起来。就要牵扯到项目部署,打包的方式了。 springboot支持jar和war: 打jar包:默认方式,项目开发完打个jar包,通过命令把jar包起起来就…

刚刚,Claude国内可直连!

刚刚,Claude国内可直连! 大家好!我是科技博主Maynor。今天我们要分享一个激动人心的消息:知名AI助手Claude现在可以在国内直接访问了! 这对于科技爱好者、学生、研究人员和各行各业的专业人士来说都是一个重大利好。…

大模型时代的小红书+马蜂窝:华人团队开发 的AI旅行app

简介 一周前,由红杉投资的硅谷初创公司UTA AI推出了其核心产品Wanderboat AI,这是一个基于GPT-4技术的智能旅行规划工具。 该平台允许用户通过对话交互来明确旅行的偏好和需求,并提供包括目的地、活动和实用建议在内的定制化旅行建议。 Wa…

算法题-字符串

1.C字符串 c提供了一下两种类型的字符串表示形式: c风格字符串c引入的string类类型 1.1C风格字符串 C 风格的字符串起源于 C 语言,并在 C 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的…

前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)

跑 jekins任务的服务器不能连接外网下载依赖包,就将本地下载的 node_modules直接上传到服务器上,但是运行时node-sass模块报错了ERROR in Missing binding /root/component/node_modules/node-sass/vendor/linux-x64-48/binding.node >> 报错信息类…

MySQl高级篇-事务、锁机制、MVCC

存储引擎的选择 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。 InnoDB:是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较…

多媒体软件开发选择Animate软件还是Unity3D软件?

以下内容可能有一些片面,因为多媒体软件开发平台有很多,因为接触Animate和Unity3D比较多,所以这里仅对这两款进行分析! Animate软件与Unity3D软件都是经常在多媒体展馆中用来制作互动展示内容的,对于这两种开发平台&a…

【可视化大屏系列】Echarts之饼图绘制

本文为个人近期学习总结,若有错误之处,欢迎指出! Echarts之饼图绘制 前言1.需求2.实现效果3.大概思路4.代码实现子组件写法父组件写法5.附加(1)圆环饼图的绘制(2)南丁格尔玫瑰饼图A.半径展示数据的大小B.面积展示数据的大小前言 在前文页面布局、DataV 的使用、Echarts…

【数据结构】--- 堆的应用

​ 个人主页:星纭-CSDN博客 系列文章专栏 :数据结构 踏上取经路,比抵达灵山更重要!一起努力一起进步! 一.堆排序 在前一个文章的学习中,我们使用数组的物理结构构造出了逻辑结构上的堆。那么堆到底有什么用呢&…

GO channel 学习

引言 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁&#…

ASP.NET Core----基础学习06----将所有数据在页面中显示 布局页面的使用

文章目录 1. 将数据以list的形式展示在页面中2. 布局页面的使用3. 自定义设置视图文件是否需要加载的JS 1. 将数据以list的形式展示在页面中 step1:在接口文件中添加新的方法GetAllStudents() step2:在mock的数据中添加方法GetAllStudents(&a…

关于mogdb vs kingbase的测评 说明

上周5同事转了一个帖子给我,说某公众号写了一篇MogDB vs KingBase的文章测评。该博主使用sysbench测了一些场景,其中大部分场景Mogdb相比KingBase而言表现都要差一些,只有一个场景比kingbase高很多。 老实说第一眼看到这个文章,我…

谷歌Gemini产品大揭秘:AI新纪元即将到来!

谷歌在Google I/O大会上预告了五款备受瞩目的Gemini产品,预计于7月15日和7月18日发布。这些产品将包括新版Imagen3、Gemini定制GPT、个性化回应功能、预设提示词以及录音与Google Photos集成等。 AI-321 | 专注全球AI工具推荐的网站 Ai工具集 | 专注ai人工智能 | 集…