今天是2024年4月17日,周三,北京,天气晴。
最近文档处理这块受到的关注比较多。
我们今天来看看PDF文档的处理逻辑,以及PPstructure开源工具,供大家一起参考。
针对给定的文档,可以根据是否可以直接提取内容来选择是走通用解析,还是走OCR方案,如下,图来自于参考文献1。
而进一步处理细节上,其具体执行逻辑,按照pipeline,可以分成文档方向分类,版面分析,而在版式分析之后,分别对不同的区域进行处理,例如表格识别、公式识别、文字识别,之后对工作进行聚合,包括阅读顺序等。
版面分析指的是对图片形式的文档进行区域划分,定位其中的关键区域,如文字、标题、表格、图片等,PPStrucure提供了版面分析、表格识别、关键信息抽取以及版面恢复等多个功能:
使用的手册如下:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/docs/quickstart.md,https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/docs/PP-StructureV2_introduction.md
代码比较简单,例如图像方向分类+版面分析+表格识别实现如下:
import os
import cv2
from paddleocr import PPStructure,draw_structure_result,save_structure_res
table_engine = PPStructure(show_log=True, image_orientation=True)
save_folder = './output'
img_path = 'ppstructure/docs/table/1.png'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder,os.path.basename(img_path).split('.')[0])
for line in result:
line.pop('img')
print(line)
from PIL import Image
font_path = 'doc/fonts/simfang.ttf' # PaddleOCR下提供字体包
image = Image.open(img_path).convert('RGB')
im_show = draw_structure_result(image, result,font_path=font_path)
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
地址:https://github.com/PaddlePaddle/PaddleOCR/blob/133d67f27dc8a241d6b2e30a9f047a0fb75bebbe/ppstructure/layout/README_ch.md
本文主要介绍了两个工作,一个是PDF的处理逻辑,另一块儿是PPstructure的开源工具,虽然使用过程中有很多bad case,但可以针对其中的模块进行魔改。
1、https://github.com/RapidAI
2、https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/docs/quickstart.md
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。