ChatGPT-PDF辅助读论文,实现用gpt对pdf 解析(开源)

文章目录

    • 思路
    • 接口代码
    • 上传代码
    • pdf转文本代码
    • 综合上述步骤完整代码
    • 效果

思路

主要为开发者提供一个思路,这里并不是完整的商业项目,只是一时兴起写的一份demo,希望对大家有帮助。

  1. 制作一个接口用于上传文件
  2. 写一个程序把文件上传到上面的接口中
  3. 对得到的文件进行提取,分析(调gpt)

开源仓库地址:GPT-PDF

接口代码

from flask import Flask, request, Response
import PyPDF2

app = Flask(__name__)


@app.route('/upload', methods=['POST'])
def upload_file():
    if 'pdf' not in request.files:
        return "No file part", 400

    file = request.files['pdf']
    if file.filename == '':
        return "No selected file", 400

    if file:
        try:
            reader = PyPDF2.PdfReader(file)
            num_pages = len(reader.pages)
            text = ''

            for page in range(num_pages):
                page_obj = reader.pages[page]
                text += page_obj.extract_text()

            # 指定返回类型为text/plain和编码为utf-8
            return Response(text, mimetype="text/plain", content_type="text/plain; charset=utf-8")

        except Exception as e:
            return str(e), 500


if __name__ == '__main__':
    app.run(debug=True)

上传代码

# coding=gbk
import requests

url = 'http://localhost:5000/upload'
files = {'pdf': open('2.pdf', 'rb')}
response = requests.post(url, files=files)

# 直接打印文本而不是编码文本
print(response.text)

pdf转文本代码

# coding=gbk
# pip install pypdf2 --upgrade

import PyPDF2

# 打开PDF文件
with open('2.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)

    # 获取PDF的总页数
    num_pages = len(reader.pages)

    # 逐页读取
    for page in range(num_pages):
        page_obj = reader.pages[page]
        print(page_obj.extract_text())

综合上述步骤完整代码

import http.client
import json
import requests
# import time

# 开始计时
# start_time = time.time()

# 获取PDF文本
url = 'http://localhost:5000/upload'
files = {'pdf': open('3.pdf', 'rb')}
response = requests.post(url, files=files)
long_text = response.text  # 从接口获得的长文本


# print(long_text)

# 分段函数
def split_text(text, max_size):
    for start in range(0, len(text), max_size):
        yield text[start:start + max_size]


# 配置GPT API   api.zhangsan.cloud
conn = http.client.HTTPSConnection("api.zhangsan.cloud")
headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer sk-zkyXXXXXXXXXXXXXXXaA47c77',
    'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
    'Content-Type': 'application/json'
}

# 准备发送到GPT API的消息
all_responses = []

# 系统提示,加入到第一个消息段
system_prompt = "请总结本篇论文,并详细告诉我论文中是基于什么背景.例如:用到了什么方法/算法,是怎么解决的,得到了什么结果,一步步详细告诉我,reply in chinese."

for i, segment in enumerate(split_text(long_text, 8000)):
    if i == 0:
        # 第一个段落,添加系统提示
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": segment}
        ]
    else:
        messages = [
            {"role": "user", "content": segment}
        ]

    payload = json.dumps({
        "model": "gpt-3.5-turbo-16k-0613",
        "messages": messages
    })

    conn.request("POST", "/v1/chat/completions", payload, headers)
    res = conn.getresponse()
    data = res.read()
    all_responses.append(json.loads(data.decode("utf-8")))

# 打印或处理所有的响应
for response in all_responses:
    content = response["choices"][0]["message"]["content"]
    print(content)


# print('\n\n')
# # 结束计时并输出运行时间
# end_time = time.time()
# print("Flask API 请求运行时间: {:.2f}秒".format(end_time - start_time))

效果

先运行接口,在运行分析。

效果如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入了解 Vue 3:性能与可用性的巨大提升

摘要:本文深入探讨了 Vue 3 相对于 Vue 2 在性能和可用性方面的重大改进,特别关注了虚拟 DOM 模块的重构(静态提升)、基于 Proxy 的响应式对象、事件缓存、更好的 Tree Shaking 支持、TypeScript 和 Monorepo 代码组织&#xff0c…

合辑下载 | MatrixOne 与 MySQL 全面对比

前言 MatrixOne是一款高度兼容MySQL语法的HTAP数据库,采用云原生化和存储、计算、事务分离的架构打造了HSTAP超融合数据引擎,实现单一数据库系统同时支持OLTP、OLAP、流计算等多种业务负载。基于MatrixOne高度兼容MySQL的定位,社区的小伙伴在…

使用 NocoDB 一键将各种数据库转换为智能表格

NocoDB 是一款开源的无代码数据库平台,可以进行数据管理和应用开发。它的灵感来自 Airtable,支持与 Airtable 类似的电子表格式交互、关系型数据库 Schema 设计、API 自动生成等特性。 但与 Airtable 相比,NocoDB 完全免费且代码开源&#xf…

柯桥专业会计培训|会计实操做账手工账电脑账出纳报税手把手教

开具纸质发票时,经常有小伙伴纠结发票开票人和复核人的问题。现在全国已施行数电票,这个问题还存在吗?一起来看看~ 暂未规定!! 开票人和复核人不应为同一人! 目前,全国大部分城市已基本实现数电票的开票试点&#x…

KIOXIA铠侠CM7系列E3.S双端口NVMe2.0 PCIe5.0 SSD KCM71RJE7T68

KIOXIA 铠侠推出的CM7-R E3.S企业级NVMe读密集型企业级固态硬盘,采用PCIe 5.0和NVMe 2.0技术,性能出色,最高可达2,700K IOPS(随机读取)和310K IOPS(随机写入)1 DWPD的耐用性和高达15.36 TB的存储…

ReactNative项目构建分析与思考之RN组件化

传统RN项目对比 ReactNative项目构建分析与思考之react-native-gradle-plugin ReactNative项目构建分析与思考之native_modules.gradle ReactNative项目构建分析与思考之 cli-config 在之前的文章中,已经对RN的默认项目有了一个详细的分析,下面我们来…

vue-office/docx插件实现docx文件预览

1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…

yarn按包的时候报错 ../../../package.json: No license field

运行 yarn config list 然后运行 yarn config set strict-ssl false 之后yarn就成功了

基于ssm学校运动会信息管理系统论文

摘 要 在当今社会上&#xff0c;体育运动越来越普及&#xff0c;参与运动会的人越来越多&#xff0c;但是目前对运动会信息管理还是处于手工记录的时代&#xff0c;这远远满足不了现在用户需求&#xff0c;因此建立一个运动会信息管理系统已经变的非常重要。 本文重点阐述了学…

Midjourney 换脸大法:保姆级教学

元宇宙和人工智能的不断发展使得真实世界和虚拟世界的边界越来越模糊。本文将介绍如何借助 Midjourney 和另一个第三方插件 InsightFace&#xff0c;来实现令人惊叹的换脸效果。 InsightFace 简介 InsightFace 是由中科院研究人员开发的开源 2D 和 3D 深度人脸识别框架。它使用…

latex下载与安装

用jupyter导出pdf时&#xff0c;需要用到Tex 1.Tex下载安装 官网 直接git下载 git clone https://github.com/latex3/latex2e.git 或者 清华大学开源软件镜像 双击.bat文件 大概需要1-2小时&#xff0c;如果安装失败&#xff0c;重新进行安装 查看是否安装成功&#xff…

男青年穿什么裤子好看?适合男生穿的百搭神裤

这几年衣服的款式可谓是越来越多了&#xff0c;很多男生在选裤子的时候都发现虽然款式越来越多&#xff0c;但现在市面上的裤子质量参差不齐&#xff0c;导致难以选择。而且还有很多商家为了利润采用低廉的材料&#xff0c;从而上身舒适性极差。 那么今天就给大家详细介绍几点…

『VUE』01. 开发前的准备(详细图文注释)

目录 nodejs安装软件检查环境变量设置镜像源 安装vue环境并搭建项目全局安装 Vue 的命令行工具&#xff08;Vue CLI&#xff09;验证安装是否成功创建新vue项目 启动vue项目进入项目根目录安装依赖启动项目 配置开发ide (vscode)安装vscode配置vue插件vue2与vue3兼容性插件js插…

10款AI写作软件,提升写作效率的武器

当今社会&#xff0c;随着人工智能技术的不断发展&#xff0c;AI写作软件正逐渐成为提升写作效率的利器。无论是从学术论文到商业文案&#xff0c;AI写作软件都为各行各业的写作者提供了强大的支持和帮助。在本文中&#xff0c;我们将探讨10款AI写作软件&#xff0c;这些工具不…

plt实现色系反转

例如我们用的色系是jet&#xff1a; import numpy as np import matplotlib.pylab as pltdef custom_min_max_scaling(data):# 计算每列的最小值和最大值min_vals np.min(data)max_vals np.max(data)# 最大最小归一化计算公式normalized_data (data - min_vals) / (max_val…

力扣由浅至深 每日一题.15 删除排序链表中的重复元素

没关系的&#xff0c;昨天的暴雨不会淋湿今天的自己 —— 24.3.26 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出…

香港云服务器推荐2024

香港云服务器推荐 2024 。至于为什么众多类型的海外服务器当中&#xff0c;香港服务器成为了首选&#xff0c;主要是因为大家考虑的还是以访问速度为前提&#xff0c;相对于美国服务器要快许多。而新加坡、日本空间则在两者之间。 “预算不够&#xff0c;服务器到底购买哪个更…

花钱买不到系列-linux信号[2]卷

上一篇信号&#xff0c;我们知道了&#xff0c;进程需要保存信号&#xff0c;信号究竟是什么&#xff1f;什么又叫做发送信号呢&#xff1f;什么又叫做进程保存信号呢&#xff1f;那么&#xff0c;实际上呢&#xff1f;给大家一个基本的思考切入点&#xff0c;就是我们常见的信…

普洱生茶保存的最佳方法是什么?

编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 普洱生茶保存的最佳方法 普洱生茶&#xff0c;作为中国茶文化中的瑰宝&#xff0c;具有独特的口感和丰富的营养价值。然而&#xff0c;要想让普洱生茶保持其优良的品质&#xff0c;正确的保存方法至关重要。本文…

git-怎样把连续的多个commit合并成一个?

Git怎样把连续的多个commit合并成一个&#xff1f; Git怎样把连续的多个commit合并成一个&#xff1f; 参考URL: https://www.jianshu.com/p/5b4054b5b29e 查看git日志 git log --graph比如下图的commit 历史&#xff0c;想要把bai “Second change” 和 “Third change” 这…