RAG应用PDF文档图文提取OCR策略,提高精准与效率,看到就是赚到!!
在RAG应用中通常需要对各种文档进行文本提取,如果稳定是纯文本那文档提取会简单很多,但通常文档中会存在各种图片信息,这时就需要使用OCR在提取文档文本信息的同时对图片进行OCR获取图片中的文本内容。本文只介绍PDF文档中OCR技术方案。PDF文档解析目前有不少开源框架亦可支持对PDF中的图片进行OCR,但此类框架通常比较重如Marker、Unstructured等。
前言
这里只使用PyMuPDF读取PDF文件并根据文档实际情况使用调用OCR进行文本提取,文本提取的质量依赖于OCR模型。PDF文档解析的速度也依赖于OCR的性能,几百页的PDF文档并不少见。
1、只提取PDF中的位图进行OCR
此方案通过解析PDF提取其内嵌的图片,只对提取的内嵌图片进行OCR,但可能会由于PDF嵌入的图片质量效果不佳或分辨率较低的问题,即使在原PDF中很清晰的图片提取出来后也是模糊不清,导致OCR准确率大大降低。特别是对于存在数学公式的PDF,提取位图进行OCR准确率极低。对图片进行二次处理如 灰度、放大、二值化、去噪后 OCR效果也不一定很理想。
上图为PDF中的数学公式,图片为PNG格式,存在一个Alpha 通道,尽管已经分离该透明通道并填充白色背景,但是OCR识别的效果依然不佳,再进行灰度、放大、二值化、去噪后,还是效果不佳。
提取文本、提取图片进行OCR的结果、提取文本、在提取图片OCR,将文本与OCR的结果进行按原顺序作为该页的文本内容。
[{'save_path': '',
'data': [{'text': 'p=$26500:(0.905)',
'confidence': 0.8825955390930176,
'text_box_position': [[3, 4], [170, 2], [171, 14], [3, 16]]},
{'text': '1.1',
'confidence': 0.9956590533256531,
'text_box_position': [[285, 3], [313, 3], [313, 15], [285, 15]]}]}]
2、整个PDF全页都进行渲染
将PDF中每一页都进行渲染为高清位图,再对每一页进行OCR。但这将导致计算量飙升,原本800页中只有10%存在图片即需要OCR的只有80页,但这种简单粗暴的方式导致OCR计算量直接翻十倍。极端情况下可能及只有一两页文档存在图片,但此方案还是会将整个文档的每页都提交OCR,导致PDF解析速度严重缓慢,图片DPI为200-300。
3、只对PDF中的“含图页”进行渲染
在本方案中通过快速扫描PDF定位PDF中哪些页数存在图片,对这些存在图片的当前页进行渲染然后进行OCR。这样将尽可能得平衡OCR的准确率与效率,极大的降低OCR次数,释放更多性能。
上图为对存在图片的该页渲染后得到的图片,对该图片直接进行OCR得到的结果比使用方案一对位图处理后OCR的结果还要好:
{'text': 'p = $26 500 (0.905)m', 'confidence': 0.9309449195861816,
'text_box_position': [[738, 2136], [1272, 2121], [1275, 2200], [740, 2215]]},
{'text': '(1.1)', 'confidence': 0.9146772623062134,
'text_box_position': [[1593, 2138], [1706, 2138], [1706, 2204], [1593, 2204]]}
在此方案中由于只整页进行OCR可以直接把OCR结果作为提取到的该页文本内容。而按方案一的方式需要对提取文本、提取图片进行OCR的结果、提取文本、在提取图片OCR,将文本与OCR的结果进行按原顺序作为该页的文本内容。
本方案的图片肯定会比方案一大很多,但由于OCR的次数是固定一次的,方案一图片可能会小一点但其图片数量比较多其整体性能也不一定会很高。
import fitz # PyMuPDF
def get_result(self):
"""获取pdf文件提取结果
"""
t0 = time.perf_counter()
self.extract_text()
self.extract_images()
for inx,item in enumerate(self.text_list):
if str(item).startswith('img_'):
if self.ocr_result:
ocr= self.ocr_result.pop(0)
self.text_list[inx]=ocr
logger.info(f"ocr:{self.ocr_result},images:{len(self.images_list)},txt:{len(self.text_list)}")
elapsed = time.perf_counter() - t0
logger.success(f"全部提取完成,耗时 {elapsed:.2f} 秒")
性能对比
这里选择了一个使用了 《程序员的数学.pdf》 进行解析提取文档中的文本信息以对比三种方案的性能,整个文档883页这里只解析200页内容用于性能对比。这里渲染出进行OCR的图片大小从500KB到2MB不等,本地环境配置较差所以OCR整体性能都不高。
方案 | 文档页数 | OCR次数(图片数) | 耗时(秒) | 说明 |
---|---|---|---|---|
位图OCR | 200 | >=200 | - | 根据文档情况OCR次数可能最多(一页包含多张图片) |
每页OCR | 200 | 200 | 343.43 | 不管存不存在图片一律进行图片OCR |
只对图片页OCR | 200 | 139 | 223.85 | OCR次数最少 |
由于本文所使用的PDF为数学书籍包含比较多的数学公式、图表等因此包含了大量图片所以方案三和方案二的区别不是特别明显,但在图片很少的场景下两者就会有巨大的差别。存在极端情况PDF是扫描件,全部是图片方案三****退化为方案二,但整体看来方案三性能还是会好过方案二。
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。
与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】

AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。
但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】


为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
所有评论(0)