PDF 解析问题调研

news2024/11/17 3:47:18
  说点真实的感受 :网上看啥组件都好,实际测,啥组件都不行。效果好的不开源收费,开源的效果不好。测试下来,发现把组件融合起来,还是能不花钱解决问题的,都是麻烦折腾一些。
  这里分享了目前网上能够看到的资料。很多资料都是反复重复的,且效果不好的。目前网上基本没有太好用的工具,也没有太好的方案资料。剩下的就是收费效果好的。

PDF解析中的诸多挑战

版面分析:如何得到标题、如何的得到段落(正确的段落)、如何得到表格、如何得到图片,图和得到图片上的文字?

还有细节问题:双栏和多栏的问题、公式问题

扫描件:扫描件本质上是图片,如何从图片中解析得到文件。

PDF解析的主要思路

针对上述的挑战,PDF解析主要分为两个方向。一是标准PDF文件,程序可读。二是扫描文件,实际上就是图片,程序不可直接读。

  1. 解析和结构分析: PDF 抓取工具首先解析 PDF 文件并分析其结构以识别文档中的各种元素。 解析涉及检查布局、字体样式、表格、标题和其他结构组件,以了解内容的组织和安排。
  2. 文本提取: 然后,该工具采用 OCR 技术将扫描或基于图像的 PDF 转换为机器可读的文本。 OCR 算法通过分析 PDF 中的视觉数据并识别字符,将其转换为可编辑和可搜索的文本来实现此目的。
  3. 数据提取和模式识别: 一旦数据转换为机器可读格式,PDF 抓取工具就会应用模式识别算法来识别文本中的特定数据点,例如文档中的关键字、模式或预定义结构。 例如,抓取工具可以根据预定规则或正则表达式查找发票号码、日期、客户姓名或产品详细信息。
  4. 输出和格式: 然后,PDF 抓取工具将提取的数据组织成相关字段和结构化格式,例如电子表格、数据库或 JSON/XML,以供进一步分析。

OCR解析的路线

OCR是唯一的解决扫描版文件的方案,包括获取图片上的内容。

unstructured

GitHub - Unstructured-IO/unstructured: Open source libraries and APIs to build custom preprocessing pipelines for labeling, training, or production machine learning pipelines.

Paddle-structure

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/table/README_ch.md#41-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

Meta的版面恢复大模型:Nougat

Meta的版面恢复大模型:Nougat  | Breezedeus.com

Nougat被戏称为富人的玩具。有一段这样的描述,就知道它有多慢了!“在一台配备有24GB VRAM的NVIDIA A10G显卡的机器上,可以并行处理6页内容。生成速度在很大程度上取决于给定页面上的文本量。在没做任何推理优化时,按平均每页有 ~1400 个 tokens算,Nougat base模型处理一个batch图片的平均时间为19.5秒。”

Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值 - 汀、人工智能 - 博客园

P2T检查走小模型的路线,目前拿来做内容识别还是OK的,特别是在公式方面。

GitHub - breezedeus/Pix2Text: Pix In, Latex & Text Out. Recognize Chinese, English Texts, and Math Formulas from Images. 80+ languages are supported.

PDF 解析工具对比

使用Python操作PDF:常用PDF库总结 - 知乎

大模型RAG问答下的实用开源文档解析工具总结及技术思考:从文档版本分析到单双栏处理

PDF信息提取技术的汇总(干货满满!) - 知乎

可以拿到bbox的组件

pdfplunber  pdfminer  pymupdf  papermage  这些组件是不是都可以拿到bbox?

  1. pdfplumber:pdfplumber 是一个基于 PDFMiner 的 Python 库,专门用于提取 PDF 文件中的文本和表格数据。它提供了一些方法来获取文本、表格和页面的 bounding box 信息。
  2. pdfminer:PDFMiner 是一个功能强大的 PDF 处理工具,可以用于提取 PDF 文件中的文本和布局信息。通过 PDFMiner,你可以获取文本、图片、表格等元素的位置信息,从而获得它们的 bounding box。
  3. pymupdf:PyMuPDF(也称为MuPDF)是一个用于处理 PDF 文件的 Python 库,提供了丰富的功能,包括提取文本、图像和其他元素的信息,以及获取它们的 bounding box。
  4. papermage:Papermage 是一个用于处理 PDF 文件的 Python 库,它使用了 PDFMiner 和其他一些工具,可以用于提取 PDF 文件中的文本、图像和布局信息,包括 bounding box。

可以拿到bbox的组件组件对比

  1. pdfplumber
    1. 优点:pdfplumber 提供了简单易用的接口,使得提取文本和表格数据以及获取 bbox 变得非常方便。
      1. 它能够准确地提取文本的 bbox,并且支持表格的识别和提取。
      2. 在处理包含复杂布局的 PDF 文件时表现较好。
    2. 缺点:对于处理包含大量图像的 PDF 文件时,性能可能不如其他库。
      1. 对于一些特殊格式的 PDF 文件,可能会出现解析错误。
  2. pdfminer
    1. 优点:PDFMiner 是一个功能强大且灵活的库,可以用于处理各种类型的 PDF 文件。
      1. 它提供了丰富的功能和选项,使得用户可以对文本和布局信息进行更深入的处理和分析。
    2. 缺点:相比于其他库,PDFMiner 的接口相对较复杂,需要更多的代码来实现相同的功能。
      1. 在处理复杂布局的 PDF 文件时,可能需要额外的调整和处理,以获得准确的 bbox 信息。
  3. pymupdf
    1. 优点:PyMuPDF(MuPDF)是一个快速和高效的 PDF 处理库,对于大型 PDF 文件的处理效率较高。
      1. 它提供了一些简单的方法来获取文本、图像和布局信息,并且可以准确地提取 bbox。
    2. 缺点:PyMuPDF 的文档和社区支持相对较少,有时可能需要进行一些自行探索和调试。
  4. papermage
    1. 优点:Papermage 是一个基于 PDFMiner 和其他一些工具构建的库,它提供了一些简单的接口来处理 PDF 文件。
      1. 它支持获取文本、图像和布局信息,并且能够准确地提取 bbox。
    2. 缺点:Papermage 相对较新,可能还不够成熟,可能存在一些功能上的限制和问题。
      1. 相比于其他库,Papermage 的文档和社区支持较少。

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

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

相关文章

幻兽帕鲁专用服务器搭建之Linux部署配置教程

大家好我是飞飞,上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求,很多小伙伴就寻思用Linux系统搭建占用会不会小一点?有计算机基础的小伙伴都知道Linux系统和Windows系统相比,…

Git实战(2)

git work flow ------------------------------------------------------- ---------------------------------------------------------------- 场景问题及处理 问题1:最近提交了 a,b,c,d记录,想把b记录删掉其他提交记录保留: git reset …

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

机器学习中类别不平衡问题的解决方案

类别不平衡问题 解决方案简单方法收集数据调整权重阈值移动 数据层面欠采样过采样采样方法的优劣 算法层面代价敏感集成学习:EasyEnsemble 总结 类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况 解决方案…

解决Excel客户端中的Copilot灰色不可用

很多小伙伴已经用上了office套件中的copilot功能 Copilot for Microsoft 365账号介绍与相关问题的解答 Copilot for Microsoft 365账号登录指南 Copilot for Microsoft 365功能使用指南 问题发现 大部分人使用的都是Word和PowerPoint功能,但是也有部分小伙伴使…

Vue项目的快速搭建

Vue项目的快速搭建 一、下载并安装node.js二、安装Vue脚手架三、创建vue项目四、项目启动五、VS Code下载安装 一、下载并安装node.js 首先确保已经安装了Node.js。如果没有安装,可以去官网(https://nodejs.org/)下载并安装最新版本的Node.j…

第16章-DNS

目录 1. 域名 1.1 产生背景 1.2 概述 1.3 域名的树形层次化结构 2. DNS 2.1 概述 2.2 工作机制 3. DNS查询模式 3.1 递归查询: 3.2 迭代查询: 4. 相关知识点 4.1 集中式DNS 4.2 国内通用DNS 4.3 配置DNS代理 1. 域名 1.1 产生背景 ① IP…

rhcsa(rh134)

shell 查看用户shell a、如下查看/etc/shells文件列出了系统上所有可用的 shell(具体的可用的 shell 列表可能会因不同的红帽版本和配置而有所不同) (如下图/etc/shells文件包含/bin/tmux并不意味着tmux是一个shell。实际上,/etc/…

通过多进程并发方式(fork)实现服务器(注意要回收子进程)

以下内容为视频学习记录。 1、父进程accept后返回的文件描述符为cfd以及用于创建连接的lfd; 调用fork()创建子进程后,子进程继承cfd,lfd,通过该cfd与连接过来的客户端通信,lfd对子进程来说没用,可以直接close(lfd); 对于父进程来说&#x…

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 (1)获取字符串长度 (2&am…

C# Open Vocabulary Object Detection 部署开放域目标检测

目录 介绍 效果 模型信息 owlvit-image.onnx owlvit-post.onnx owlvit-text.onnx 项目 代码 Form1.cs OWLVIT.cs 下载 C# Open Vocabulary Object Detection 部署开放域目标检测 介绍 训练源码地址:https://github.com/google-research/scenic/tree/…

flink重温笔记(九):Flink 高级 API 开发——flink 四大基石之WaterMark(Time为核心)

Flink学习笔记 前言:今天是学习 flink 的第 9 天啦!学习了 flink 四大基石之 Time的应用—> Watermark(水印,也称水位线),主要是解决数据由于网络延迟问题,出现数据乱序或者迟到数据现象&…

九州金榜|导致孩子厌学的家庭因素有哪些?

造成孩子厌学的因素有很多,其中家庭因素是非常重要的因素,而家庭因素造成孩子厌学的原因主要是因为家长在教育中,更多的不懂如何正确教育孩子,就会造成孩子厌学,下面九州金榜家庭教育从以下几个方面分析因为家庭因素造…

C/C++工程师面试题(数据库篇)

索引的优缺点 索引是一种支持快速查找特定行的数据结构,如果没有索引,就需要遍历整个表进行查找。用于提高数据检索的速度和效率。 好处: 提高检索速度: 索引可以加快数据的检索速度,因为它们允许数据库系统直接定位到…

枚举法实例以及试题

题目 1 因子个数 思路: 从因子1找到它本身,其中我们发现因子都是成对出现的,除非它是完全平方数,因此我们采用for循环一个一个找出来就行,查找它因子的个数。 题目 2 阶乘因子 思路: 创建一个【n+1】的数组,初始值全都为0,用来存放它的质数因子个数。用两个for循环,…

mTLS: openssl创建CA证书

证书可以通过openssl或者keytool创建,在本篇文章中,只介绍openssl。 openssl 生成证书 申请操作流程 生成ca证书私钥, 文件名:ca.key生成ca证书,文件名:ca.crt生成Server/Client 证书私钥,文件名&#x…

8、IBOScms代码审计

一、sql注入 1、sql注入(Ⅰ) 限制 rreport/api/getlist {"offset":0,"type":"send","keyword":{"subject":"111) AND (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- qw"}}复现 POST /?rreport/api/…

项目-论坛系统

基于Spring前后端分离版本的论坛系统。 1、构建项目结构 common公共类:统一返回结果、全局变量、异常枚举信息config配置类:Swagger,用于自动生成CRUD和基本对象controller控制器类:用于接受前端信息和控制路由dao数据库访问类&…

uniapp聊天记录本地存储(详细易懂)

目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息,信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目,使用到了本地存储。需要把聊天信息保存在本地,实时获…

synchrosized 的可重入特性、死锁、哲学家就餐问题以及解决死锁的方法等干货

文章目录 💐synchrosized的可重入特性关于死锁:哲学家就餐问题💡如何避免/解决死锁 💐synchrosized的可重入特性 可重入特性:当一个线程针对一个对象同时加锁多次,不会构成死锁,这样的特性称为…