基于AI大模型的复杂扫描件PDF信息提取与规整

前言

场景大致是会上传一个几十页的扫描件PDF,让AI在当中找出我需要的字段,本文会隐去具体行业信息和具体的AI提示词内容,只分享技术相关内容,请见谅。

AI模型选择

针对我们行业的使用场景,我主要测试了GPT、Claude以及国内知名的AI公司产品。

下标中”PDF可“的代表能够识别扫描件PDF。

相似字符有3组测试用例,1组为6与8相似,2组为0与O相似,3组为0与Q相似。

信息匹配应该是有2个组。

文件歧义号码查找,是指一个页面上有两个编号,通过我的提示语去查找正确的那个号码。

平台

翻墙

能够读取的文件类型

横向文件识别

特例对比(相似字符识别)

特例对比(信息匹配)

特例对比(歧义号码查找)

速度

备注

KIMI🐅

PDF可

👌

3对,第一个6和8都错了,第二个O和0没识别出来。

只分了1个组,每组里面2个字段不对,1个字段没找到。

找错

OK

豆包

PDF可

👌

1对,第二个O和0没识别出来,第三个压根没识别

只分了1个组,每组里面1个字段不对,5个字段没找到。

👌

OK

GPT

扫描版pdf不支持

文件单次最多10

/

/

/

/

/

Claude

扫描版pdf不支持

文件单次支持5

/

/

/

/

/

通义

扫描版pdf不支持

/

/

/

/

/

百川智能🐅

PDF可

👌

1、3对,第二个O和0没识别出来。

分了2组。2个字段没有按要求提供,多个字段没找到。

👌

OK

讯飞星火

PDF可

找不到

找不到

找不到

找不到

非常慢

少有的交白卷选手

智谱清言🐅

PDF可

👌

1、3对,第二个O和0没识别出来。

分了2个组,2个字段没有按要求提供,2个字段不对,1个字段没找到。

找错

很慢

当我给AI的提示词有任何错误,如输入文字打错、json的某几个引号打成中文引号了,都会影响他的输出,唯一一个对输入语言没有纠错的模型。

文心一言

PDF可

👌

1、3对,第二个O识别成一个小圆圈,但是至少把0和O区别是看出来了

🚫一塌糊涂,直接把我输入的Json字段瞎替换了

👌

超级无敌慢,上传之后文件要先阅读很久,然后才能提交问题

海螺ai🐅

PDF可

👌

1、3对,第二个O和0没识别出来。

分了两个组,匹配的字段全对,除了2个字段没有按要求翻译成中文。

👌

OK

360智脑

PDF可

/

数据全部都是瞎填的

🚫一塌糊涂,直接把我输入的Json字段瞎替换了

找错

超级无敌慢

天工ai

不能上传文件

/

/

/

/

/

万知🐅

PDF可

👌

1、3对,第二个O和0没识别出来。

分了2个组,2个字段没有按要求提供,3个字段不对,3个字段没找到。

👌

慢,解析要时间,被迫阅读全文要时间,然后才能提问

上传文档不能同时提问,每次都要等他月度总结完才能提问

实验下来,发现提示词非常重要,调整了好多天的提示词后,AI返回的结果已经尽可能符合我们希望得到的结果了。

我们最满意海螺ai的效果,但是当我们想接到系统,发现海螺的Minimax公司下提供的接口,上传文件后返回的是文件id,无法喂给ChatCompletion接口使用。

发现Kimi的Moonshoot接口有上传文件功能,样例是会先把pdf转换成文字内容,再做逻辑判断。

提示词

先总结一下我最后使用的提示词吧。

需要明确AI的定位、为我们做些什么。如果有整理好需要AI提取的内容,直接整理成Json形式让它填写更好,也便于我们对接其他系统。给AI可执行的步骤,有特别的定义可以写定义,如果没有也可以去掉。特殊要求中的1我觉得十分重要,避免AI胡乱填写,其他则填写一些具体的逻辑相关需求,如哪个字段要怎么查找,需要做什么处理。

职位:你是一个勤劳的具备图像信息提取、信息规整的智能助手,不要进行任何形式的偷懒。

职能:我有一个文件,其中包含了大量信息。我已经准备了一个JSON模板,其中列出了我需要从PDF中提取的所有字段和结构。请根据PDF内容填写这个JSON模板。以下是JSON模板的示例结构:

{

        "字段1":"",

        "字段2":"",

        "字段3":[

                {

                        "字段3-1":"",

                        "字段3-2":"",

                        "字段3-3":""

                }

        ],

}

请按照以下步骤操作:

  1. 阅读PDF文件:仔细阅读PDF文件,确保理解所有内容
  2. 填写JSON模板:根据PDF文件中的信息,填写上述JSON模板中的相应字段。
  3. 定义
    • XXXX内容为XX
  4. 特殊要求:
    • 对于没有在文件中找到的信息,请保留空白,不要胡编乱造。
    • 字段1需要在中文内容中查找
  5. 验证信息:在完成填写后,请仔细检查所有信息,确保没有遗漏或错误。尤其要再次核对是否都满足我的特殊要求了。
  6. 输出结果:将填好的JSON模板作为最终结果提供给我。

请确认你理解了我的要求,并开始处理文件。如果有任何不清楚的地方,请随时询问。

虽然复制是复杂了一些,但是目前测试下来效果还是蛮不错的。

Python API使用代码

其实我开始是试过使用Dify的,Dify现在支持上传PDF了,但是支持使用PDF内容的模型非常少。加上后来希望直接对接到我们现有系统里,于是还是直接上手试了一下API。

纯使用Moonshot的我这边就不贴出来了,文档里面写的很清晰。

https://platform.moonshot.cn/docs/api/files#%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6

 借这个思路,我尝试了使用Moonshot提供的读取PDF接口,(虽然他的OCR效果不能说最佳,但是使用确实方便…),拿到信息后丢给Minimax来分析。我需要的场景下,确实这么做出来的结果要比纯Moonshot的更好一些。

如果涉及到返回结果里面有,易涉及隐私问题的文本信息,包括但不限于邮箱、域名、链接、证件号、家庭住址等,Minimax是默认会返回时候打星号。一定要记得加上"mask_sensitive_info":False。

# -*- coding: utf-8 -*-
import requests
from pathlib import Path
from openai import OpenAI
import re
import jsongroup_id=""
api_key="" # <--在这里使用MiniMax账户管理-接口密钥中API KEY进行接入client = OpenAI(api_key="MOONSHOT_API_KEY", # 在这里将 MOONSHOT_API_KEY 替换为你从 Kimi 开放平台申请的 API Keybase_url="https://api.moonshot.cn/v1",
)# moonshot.pdf 是一个示例文件, 我们支持文本文件和图片文件,对于图片文件,我们提供了 OCR 的能力
# 上传文件时,我们可以直接使用 openai 库的文件上传 API,使用标准库 pathlib 中的 Path 构造文件
# 对象,并将其传入 file 参数即可,同时将 purpose 参数设置为 file-extract;注意,目前文件上传
# 接口仅支持 file-extract 一种 purpose 值。
file_object = client.files.create(file=Path("720380146.pdf"), purpose="file-extract")# 获取结果
# file_content = client.files.retrieve_content(file_id=file_object.id)
# 注意,某些旧版本示例中的 retrieve_content API 在最新版本标记了 warning, 可以用下面这行代替
# (如果使用旧版本的 SDK,可以继续延用 retrieve_content API)
file_content = client.files.content(file_id=file_object.id).text
#print(file_content)url = "https://api.minimax.chat/v1/text/chatcompletion_pro?GroupId=" + group_id
headers = {"Content-Type":"application/json", "Authorization":"Bearer " + api_key}payload = {"bot_setting":[{"bot_name":"MM智能助理","content":"MM智能助理是一款由MiniMax自研的,没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司,一直致力于进行大模型相关的研究。",}],"messages":[{"sender_type":"USER", "sender_name":"username", "text":file_content},{"sender_type":"USER", "sender_name":"username",  "text":"提示词"}],"reply_constraints":{"sender_type":"BOT", "sender_name":"MM智能助理"},"model":"abab6.5s-chat","tokens_to_generate":2048,"temperature":0.01,"top_p":0.95,"mask_sensitive_info":False
}response = requests.request("POST", url, headers=headers, json=payload)
response_msg = json.loads(response.text)# 提取 choices[0].messages[0].text 的内容
result = response_msg['choices'][0]['messages'][0]['text']#提取当中JSON返回的内容,其他部分为描述文字,这个场景下系统不需要
# 尝试找到JSON的开始和结束位置
try:# 找到第一个{的位置start = result.index('{')# 找到最后一个}的位置end = result.rindex('}')# 提取JSON字符串json_str = result[start:end+1]# 解析JSON字符串data = json.loads(json_str)print(data)
except (ValueError, json.JSONDecodeError) as e:#没有找到json内容print("系统错误")

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

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

相关文章

MySQL的SQL语句之触发器的创建和应用

触发器 Trigger 一.触发器 作用&#xff1a;当检测到某种数据表发生数据变化时&#xff0c;自动执行操作&#xff0c;保证数据的完整性&#xff0c;保证数据的一致性。 1.创建一个触发器 如上图所示&#xff0c;查看这个create的帮助信息的时候&#xff0c;这个create trig…

2016年ATom-1活动期间航班的每10秒一次的碳 monoxide (CO) 观测数据

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: Observed and GEOS-5 Simulated CO Concentrations with Tagged Tracers for ATom-1 简介 该数据集包含2016年ATom-1活动期间航班的每10秒一次的碳 monoxide (CO) 观测数据&#xff0c;以及来自戈达德地球观…

Ambari里面添加hive组件

1.创建hive数据库 在添加hive组件之前需要做的事情&#xff0c;先在master这个虚拟机里面创建好hive 先进入虚拟机里面进入mysql 然后输入这个命令看看有没有自己创建的hive数据库 show databases;有的话会显示下面这个样子 没有的同学使用以下命令可以在MySQL中创建hive数…

Java 集合一口气讲完!(上)||o(*°▽°*)o|Ю [有人吗?]

Java 集合遍历 Java集合教程 - Java集合遍历 在Java Collections Framework中&#xff0c;不同类型的集合使用不同类型的数据结构以不同的方式存储它们的元素。 一些集合对它们的元素有排序&#xff0c;有些没有。集合框架提供了遍历集合的以下方法&#xff1a; 使用迭代器使…

Oracle视频基础1.1.3练习

1.1.3 需求&#xff1a; 完整格式查看所有用户进程里的oracle后台进程 查看物理网卡&#xff0c;虚拟网卡的ip地址 ps -ef | grep oracle /sbin/ifconfig要以完整格式查看所有用户进程中的 Oracle 后台进程&#xff0c;并查看物理和虚拟网卡的 IP 地址&#xff0c;可以使用以下…

akshare股票涨跌板与资金流向相关分析

## akshare文档涨跌板 https://akshare.akfamily.xyz/data/stock/stock.html#id374资金流向 https://akshare.akfamily.xyz/data/stock/stock.html#id154涨跌板&#xff1a;https://quote.eastmoney.com/ztb/detail#typeztgc 资金流向&#xff1a;https://data.eastmoney.com/…

【汽车悬挂减震器】制造行业的市场需求与汽车产量呈明显的正相关关系

摘要 根据研究团队调研统计&#xff0c;2023年全球汽车悬挂减震器市场销售额达到了605亿元&#xff0c;预计2030年将达到834亿元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为5.1%&#xff08;2024-2030&#xff09;。中国市场在过去几年变化较快&#xff0c;2023年…

11 P4995 跳跳!

题目&#xff1a; 核心&#xff1a; 贪心策略&#xff1a;每次都跳距离自己最远的石头 收获&#xff1a;双指针&#xff08;下标&#xff09;的使用 代码&#xff1a; #include<iostream> using namespace std; # define M 100 #include<algorithm> #include<ma…

热点聚焦:AI在医疗保健领域的深度渗透与变革

内容概要 随着人工智能技术的不断进步&#xff0c;我们正在见证一个充满奇迹的转变&#xff0c;尤其是在医疗保健领域。这种转变不仅仅涉及到提高效率&#xff0c;更在于重新定义我们对疾病诊断和治疗方案的理解。通过智能算法&#xff0c;AI能够在早期识别潜在的健康问题&…

Unity3D URP应用与优化详解

前言 Unity3D是一款广泛应用于游戏开发、影视制作和虚拟现实等领域的强大游戏引擎。在Unity3D中&#xff0c;渲染管线是决定图形质量和性能的关键因素之一。Universal Render Pipeline&#xff08;URP&#xff09;是Unity3D最新推出的渲染管线&#xff0c;为移动和轻量级渲染而…

驱动TFT-1.44寸屏(ST7735)显示器

目录 一、驱动芯片介绍 二、驱动方式 三、完整代码下载 TFT1.44寸屏&#xff0c;搭配ST7735驱动芯片&#xff0c;是一种专为小型电子设备设计的彩色液晶显示解决方案。该屏幕采用薄膜晶体管&#xff08;TFT&#xff09;技术&#xff0c;能够实现高亮度、高对比度和丰富的色彩…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中&#xff0c;TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别&#xff0c;以通俗易懂的方式进行解释&#xff1a; 1. 模型层数 OSI 模型&#xff1a;有 7 层&#…

阐述对鸿蒙生态的认知和了解,并对鸿蒙生态的崛起进行简要分析

一、对鸿蒙生态的认知和了解 1. 系统架构层面 鸿蒙操作系统是一个分布式操作系统&#xff0c;它具有分层架构。内核层包括Linux内核、LiteOS等多种内核&#xff0c;能够适应不同设备的资源和性能需求。例如&#xff0c;在智能穿戴设备这种资源受限的场景下&#xff0c;LiteO…

#渗透测试#SRC漏洞挖掘# 操作系统-windows系统基础02

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

C++/Opengl编程实践

一、OpenGL编程前提 图形编程是以来显卡的&#xff0c;其程序分为两部分&#xff0c;一部分是用C/java语言编写运行在CPU上的&#xff0c;另一部分是使用着色器语言(GLSL)编写&#xff0c;运行在GPU上的。 1. 需要使用的编程语言及三方库 OpenGL是一个底层无关的图形库&…

使用onnxruntime-web 运行yolov8-nano推理

ONNX&#xff08;Open Neural Network Exchange&#xff09;模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型&#xff0c;为了让这个推理更直观&#xff0c;我选择了试验下yolov8 识别预览图片&#xff1a; 1. 跨平台兼容性 ONNX 是一种开…

CSS3新增盒子属性(三)

1、CSS3新增盒子属性 1.1 box-sizing 设置盒子的大小。 content-box&#xff1a;设置内容区的大小&#xff1b;border-box&#xff1a;设置盒子的总大小。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><t…

kubectl常用命令简介

在之前浅谈Kubernetes集群架构 中介绍了kube-apiserver是提供k8s对内或对外的api请求的唯一入口&#xff0c;本文介绍的 kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的…

Qt 练习做一个登录界面

练习做一个登录界面 效果 UI图 UI代码 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"ge…

ArcGIS软件之“新建中学最适合地址”地图制作

目录 最终效果图(全文图中的颜色类似即可&#xff0c;形状一样为标准&#xff09;第一步、设置现有中学的欧式距离第二步、将计算好的欧式距离 进行重分类第三步、进行核密度分析第四步、进行人口密度的重分类第五步、进行土地使用的要素转栅格第六步、对上一步进行重分类第七步…