指南 | OpenAI API对PDF进行总结提炼

news2024/12/26 22:15:38

前言

本文将针对信息过载阅读搜索难的问题,展示如何利用OpenAI API高效地自动总结PDF,从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践,旨在确保准确且高效地进行文档摘要。另外,本文还将深入探讨运用AI技术进行PDF总结的优势,如提高生产力、节省时间等,同时分析了在实际应用中可能遇到的局限性和挑战。

image.png

通过本文,可帮助您简化阅读过程,提高处理大量信息的能力,从而提升工作效率和学术表现,更好地应对快节奏世界中的信息挑战,充分利用AI技术为您的阅读和学习带来更多便利。

环境准备

在开始前,我们要准备好开发开发环境,首先你要准备好Openai的访问密钥,提供文本总结的能力。\ 其次你要准备python语言的开发环境,并且安装Fitz库,A该库将提供读取、写入和操作PDF文件的能力。

pip pip install PyMuPDF openai

然后将必要的库引入到Python文件中。

python import fitz import openai

读取pdf内容

```python import fitz import openai

context = ""

with fitz.open(‘filename.pdf’) as pdffile: numpages = pdffile.pagecount

for pagenum in range(numpages): page = pdffile[pagenum] pagetext = page.gettext() context += page_text ```

  1. 创建一个名为Context的变量,将其设置为空字符串。此变量将用于存储整个PDF文档的文本内容。
  2. 使用Fitz库的fitz.open()函数打开PDF文件。此函数将PDF文件名作为参数。
  3. 使用pdf_file对象的page_count属性获取PDF文件中的总页数。这将用于循环遍历PDF文件中的每一页。
  4. 使用for循环遍历PDF文件中的每一页。循环从0开始,到num_pages - 1结束,因为Python的数组索引从0开始。
  5. 在循环内部,使用pdf_file对象获取当前页面。page_num变量用于索引PDF文件中的页面。
  6. 使用页面对象的get_text()方法提取当前页面的文本内容。此方法返回包含页面文本的字符串。
  7. 使用+=运算符将当前页面的文本追加到Context变量。这将文本添加到Context字符串的末尾。
  8. 在循环完成后,Context变量将包含整个PDF文档的文本内容。

分解pdf成段落

下一步是将pdf的内容输入 split_text函数,该函数负责将文本划分为每段包含5000个字符的段落。

```python

def splittext(text, chunksize=5000): “”” Splits the given text into chunks of approximately the specified chunk size.

Args: text (str): The text to split.

chunk_size (int): The desired size of each chunk (in characters).

Returns: List[str]: A list of chunks, each of approximately the specified chunk size. “””

chunks = [] currentchunk = StringIO() currentsize = 0 sentences = senttokenize(text) for sentence in sentences: sentencesize = len(sentence) if sentencesize > chunksize: while sentencesize > chunksize: chunk = sentence[:chunksize] chunks.append(chunk) sentence = sentence[chunksize:] sentencesize -= chunksize currentchunk = StringIO() currentsize = 0 if currentsize + sentencesize < chunksize: currentchunk.write(sentence) currentsize += sentencesize else: chunks.append(currentchunk.getvalue()) currentchunk = StringIO() currentchunk.write(sentence) currentsize = sentencesize if currentchunk: chunks.append(current_chunk.getvalue()) return chunks ```

  1. 该代码定义了一个名为 split_text 的 Python 函数,用于将较长的文本分割成大小相近的较小块。
  2. 函数使用 sent_tokenize 函数将文本分割成句子,然后遍历每个句子以创建块。
  3. 每个块的大小可以在函数参数中指定,默认大小为5000个字符。
  4. 该函数返回一个块列表,每个块的大小约为指定的大小。 这个函数可以用于对较长的 PDF 文本进行摘要处理,将它们分解成容易处理的较小块。

总的来说,split_text函数将冗长的PDF文本分解成可管理的段落,以便进行归纳总结,使其更容易处理和提取关键信息。

用OpenAI模型归纳总结文本段落

```python def gpt3completion(prompt, engine=’text-davinci-003', temp=0.5, topp=0.3, tokens=1000):

prompt = prompt.encode(encoding=’ASCII’,errors=’ignore’).decode() try: response = openai.Completion.create( engine=engine, prompt=prompt, temperature=temp, topp=topp, max_tokens=tokens ) return response.choices[0].text.strip() except Exception as oops: return “GPT-3 error: %s” % oops ```

  1. def gpt3_completion(prompt, engine='text-davinci-003', temp=0.5, top_p=0.3, tokens=1000)这个函数接受一个提示字符串和四个可选参数:engine,temp,top_p 和 tokens。
  2. promptprompt.encode(encoding='ASCII',errors='ignore').decode() 将提示字符串编码为 ASCII 格式,并在编码过程中忽略可能出现的任何错误,然后将其解码回字符串。 3.try:except Exception as oops:用于处理在执行 try 块内的代码时可能出现的任何错误。
  3. response = openai.Completion.create(...)向 OpenAI GPT-3 API发送请求,根据提供的prompt、engine、temp、top_p 和 tokens 参数生成文本补全。响应结果存储在 response 变量中。
  4. return response.choices[0].text.strip() 从响应对象中提取生成的文本,并删除任何前导或尾随的空白字符。
  5. 如果在执行 try 块期间发生错误,函数将返回一个包含错误信息的错误消息。

总结

总的来说,本文实现的能力极大地简化阅读过程。通过使用 Fitz 库和 OpenAI 的 GPT-3 语言模型我们可以轻松地从 PDF 文件中提取并总结关键信息。另外,本文使用的是GPT-3模型,如果使用GPT-4模型那效果更佳,特别是2023年6.13以后的模型版本更出彩。

image.png

当然,本文只是为实现pdf的总结提炼提供一个思路,如果是工程级别,其中还要考虑到处理文件页数足够的多怎么办,如何索引目录以及内容,如何避免模型胡诌,如何提供隐私加密等等。其中可能要用到Embedding,提示工程,加密等技术,可参照上图的大体流程,我们放在后面的文章讨论。

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

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

相关文章

Cocos Creator3D:发布到 Web 平台

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布&#xff0c;打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板&#xff0c;可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题&#xff1a; Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊&#xff1a;Frontiers in Endocrinology 影响因子&#xff1a;6.055 作者单位&#xff1a;河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC&#xff08;Inversion of Control&#xff09;控制反转 (1)什么是控制反转呢&#xff1f; (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目&#xff1a;Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目&#xff1a;重新审视半监督语义分割中的强弱一致性 论文链接&#xff1a;https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求&#xff1a; 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

&#xff08;1&#xff09;如何查看db文件Log &#xff08;2&#xff09;如何确认线程关系 &#xff08;3&#xff09;常见类型 &#xff08;A&#xff09;等锁 线程状态为"Blocked"&#xff0c;通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展&#xff0c;图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢&#xff1f;本文将为您介绍一些基本概念和示例代码&#xff0c;帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法&#xff0c;经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作&#xff0c;其参数更新是通过下式进行的&#xff1a; 用于衡量决策模型的优劣目标&#xff0c;决策模型的优化目标为寻找最优决策&#xff0c;使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者&#xff1a;Mike Nichols Elastic 推出了 Elastic AI Assistant&#xff0c;这是一款由 ESRE 提供支持的开放式、生成式 AI 助手&#xff0c;旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…

Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

1. 前言 在上一期&#xff0c;我对WebSocket进行了基础及理论知识普及学习&#xff0c;而这一期&#xff0c;我重点是要带着你们进行实战教学&#xff0c;手把手教学如何在springboot架构基础上集成WebSocket及实现前后端通讯功能。具有很好的学习价值&#xff0c;希望大家在学…

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架&#xff0c;提供了诸多操作浏览器的方法&#xff0c;本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法&#xff0c;如下所示&#xff1a; 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性…

MacOS 高颜值的 数据库客户端工具 Tableplus 简单逆向分析

0x0 navicat 给公司发律师函了, 所以不能白嫖了.. 后来一直在找替代品, 但均感觉略有不足. dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅 mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲 Sequel Ace : 开源免费, 但是只支持mysql,功能简单 最后试了下 Tab…

【手撕MyBatis源码】插件体系

文章目录 概述插件的使用插件代理机制自动分页插件拦截目标分页插件原理 概述 Mybatis作为一个应用广泛的优秀的ORM开源框架&#xff0c;这个框架具有强大的灵活性&#xff0c;在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插…

​如何高效开发一个OA办公系统​?

如何才能高效开发一个OA办公系统&#xff1f;这篇教你使用零代码工具从0-1搭建一个OA办公系统&#xff0c;无需代码基础&#xff0c;只要你懂业务&#xff0c;只需3步即可搭建&#xff01; 先来看看效果—— 系统模板>> https://www.jiandaoyun.com/ 整个系统包含物资管…

动态规划经典题型:最小路径和、所有路径

题目1&#xff1a;最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例&#xff1a; 输入&#xff1a;grid [[1,3,1],[1…

计算机网络之链路层和局域网

六.链路层和局域网 6.1 链路层概述 6.1.1 链路层可能提供的服务 成帧、链路接入、可靠交付、差错检测和纠正 6.1.2 链路层在何处实现 下图是一个典型的主机体系结构&#xff0c;链路层的主体部分是在网络适配器实现的&#xff0c;部分链路层是在运行于主机CPU上的软件实现的…

融云 CTO 岑裕受邀出席亚马逊云科技「出海日」论坛

&#xff08;点击购买《社交泛娱乐出海作战地图》&#xff09; 6 月 9 日&#xff0c;亚马逊云科技主办的“潮向新世界”出海日活动在深圳举行&#xff0c;融云作为领军出海服务企业受邀出席。关注【融云全球互联网通信云】了解更多 在现场展位&#xff0c;融云的一站式全生态…

如何查看电脑是否安装了mysql

可以通过以下几种方式查看电脑是否安装了MySQL: 1. 在系统服务中查找MySQL服务 打开控制面板 → 管理工具 → 服务,在服务列表中查找“MySQL”服务。如果存在MySQL服务并且启动类型为“自动”或“手动”,则表示已安装MySQL。 2. 查找MySQL安装目录 一般MySQL的安装目录为:- Wi…