在本文中将使用Python/ target=_blank class=infotextkey>Python演示如何解析文档(如pdf)并提取文本,图形,表格等信息 。
文档解析涉及检查文档中的数据并提取有用的信息 。它可以通过自动化减少了大量的手工工作 。一种流行的解析策略是将文档转换为图像并使用计算机视觉进行识别 。而文档图像分析(Document Image Analysis)是指从文档的图像的像素数据中获取信息的技术,在某些情况下,预期结果应该是什么样的没有明确的答案(文本、图像、图表、数字、表格、公式……) 。
文章插图
OCR (Optical Character Recognition,光学字符识别)是通过计算机视觉对图像中的文本进行检测和提取的过程 。它是在第一次世界大战期间发明的,当时以色列科学家伊曼纽尔·戈德堡(Emanuel Goldberg)发明了一台能读取字符并将其转换为电报代码的机器 。到了现在该领域已经达到了一个非常复杂的水平,混合图像处理、文本定位、字符分割和字符识别 。基本上是一种针对文本的对象检测技术 。
在本文中我将展示如何使用OCR进行文档解析 。我将展示一些有用的Python代码,这些代码可以很容易地用于其他类似的情况(只需复制、粘贴、运行),并提供完整的源代码下载 。
这里将以一家上市公司的PDF格式的财务报表为例
文章插图
检测和提取该PDF中的 文本、图形和表格
环境设置文档解析令人烦恼的部分是,有太多的工具用于不同类型的数据(文本、图形、表格),但没有一个能够完美地工作 。下面是一些最流行方法和软件包:
- 以文本方式处理文档:用PyPDF2提取文本,用Camelot或TabulaPy提取表,用PyMuPDF提取图形 。
- 将文档转换为图像(OCR):使用pdf2image进行转换,使用PyTesseract以及许多其他的库提取数据,或者只使用LayoutParser 。
# with pip pip install python-poppler # with conda conda install -c conda-forge poppler
你可以很容易地读取文件:# READ AS IMAGE import pdf2imagedoc = pdf2image.convert_from_path("doc_Apple.pdf") len(doc) #<-- check num pages doc[0] #<-- visualize a page
文章插图
跟我们的截图一模一样,如果想将页面图像保存在本地,可以使用以下代码:
# Save imgs import osfolder = "doc" if folder not in os.listdir(): os.makedirs(folder)p = 1 for page in doc: image_name = "page_"+str(p)+".jpg" page.save(os.path.join(folder, image_name), "JPEG") p = p+1
【使用Python和OCR进行文档解析的完整代码演示】最后,我们需要设置将要使用的CV引擎 。LayoutParser似乎是第一个基于深度学习的OCR通用包 。它使用了两个著名的模型来完成任务:Detection: Facebook最先进的目标检测库(这里将使用第二个版本Detectron2) 。
pip install layoutparser torchvision && pip install "git+https://github.com/facebookresearch/detectron2.git@v0.5#egg=detectron2"
Tesseract:最著名的OCR系统,由惠普公司在1985年创建,目前由谷歌开发 。pip install "layoutparser[ocr]"
现在已经准备好开始OCR程序进行信息检测和提取了 。import layoutparser as lp import cv2 import numpy as np import io import pandas as pd import matplotlib.pyplot as plt
检测(目标)检测是在图片中找到信息片段,然后用矩形边框将其包围的过程 。对于文档解析,这些信息是标题、文本、图形、表……让我们来看一个复杂的页面,它包含了一些东西:
文章插图
这个页面以一个标题开始,有一个文本块,然后是一个图和一个表,因此我们需要一个经过训练的模型来识别这些对象 。幸运的是,Detectron能够完成这项任务,我们只需从这里选择一个模型,并在代码中指定它的路径 。
推荐阅读
- 外贸独立站为什么要添加新页面和索引它?
- k8s亲和性调度-nodeAffinity
- 别再用 offset 和 limit 分页了,性能太差
- 一个 Java 猿眼中 Vue3 和 Vue2 的差异
- 考试|“民办本科”和“公办专科”的差别,不只是学费,别等毕业才明白
- 双十一忘了用津贴怎么办-双十一忘了使用购物津贴怎么办
- 高筱贝和刘筱亭什么关系-高筱贝刘筱亭谁是师兄
- 面试|工资和你有什么关系?
- 高铁和动车的区别是什么?
- 紫檀|清代 和田玉籽料福禄牌