想法
大型语言模型已经席卷了互联网,导致更多的人没有认真关注使用这些模型最重要的部分:高质量的数据!本文旨在提供一些有效从任何类型文档中提取文本的技术。
Python库
本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一个单页PDF文件,可在以下链接获取:
https://github.com/keitazoumana/Experimentation-Data/blob/main/Experimentation_file.pdf
由于Pytesseract和easyOCR可以处理图像,因此在执行内容提取之前需要将PDF文件转换为图像。可以使用pypdfium2进行转换,这是一个用于处理PDF文件的强大库,其实现如下:
以下函数以PDF作为输入,并将PDF的每一页作为图像列表返回。
现在,我们可以使用display_images函数来可视化PDF文件的所有页面。
通过组合上述两个函数,我们可以得到以下结果:
图片PDF以图像格式可视化
深入文本提取过程
1.Pytesseract
Pytesseract(Python-tesseract)是用于从图像中提取文本信息的Python OCR工具,可以使用以下pip命令进行安装:
以下的辅助函数使用了 Pytesseract 的 image_to_string() 函数从输入图像中提取文本。
可以使用 extract_text_with_pytesseract 函数提取文本,如下所示:
成功执行以上代码将生成以下结果:
Pytesseract 首先通过从图像的右上角到右下角识别矩形形状。然后它提取各个图像的内容,最终的结果是这些提取内容的串联。这种方法在处理基于列的 PDF 和图像文档时效果非常好。
2.easyOCR
easyOCR 也是一个用于光学字符识别的开源 Python 库,目前支持提取 80 多种语言的文本。easyOCR需要安装Pytorch 和 OpenCV,可以使用以下指令安装:
根据您的操作系统,安装 Pytorch 模块的方法可能不同。但所有的说明都可以在官方页面上找到。现在我们来安装 easyOCR 库:
在使用 easyOCR 时,因为它支持多语言,所以在处理文档时需要指定语言。通过其 Reader 模块设置语言,指定语言列表。例如,fr 用于法语,en 用于英语。语言的详细列表在此处可用。
文本提取过程在extract_text_with_easyocr 函数中实现:
我们可以如下执行上述函数:
easyOCR 的结果
与 Pytesseract 相比,easyOCR 的效果似乎不太高效。例如,它能够有效地读取前两个段落。然而,它不是将每个文本块视为独立的文本,而是使用基于行的方法进行读取。例如,第一个文本块中的字符串“Data Science section covers basic to advanced”已与第二个文本块中的“overfitting when training computer vision”组合在一起,这种组合完全破坏了文本的结构并使最终结果产生偏差。
3.PyPDF2
PyPDF2 也是一个专门用于 PDF 处理任务的 Python 库,例如文本和元数据的检索、合并、裁剪等。
提取逻辑实现在 extract_text_with_pyPDF 函数中:
使用 PyPDF 库进行文本提取
提取过程快速而准确,甚至保留了原始字体大小。PyPDF 的主要问题是它不能有效地从图像中提取文本。
4.LangChain
LangChain 的 UnstructuredImageLoader 和 UnstructuredFileLoader 模块可分别用于从图像和文本/PDF 文件中提取文本,并且在本节中将探讨这两个选项。
首先,我们需要按照以下方式安装 langchain 库:
(1) 从图像中提取文本
以下是提取文本的函数:
现在,我们可以提取内容:
来自 langchain UnstructuredImageLoader 的文本提取。
该库成功高效地提取了图像的内容。
(2) 从 PDF 中提取文本
以下是从 PDF 中提取内容的实现:
类似于 PyPDF 模块,langchain 模块能够生成准确的结果,同时保持原始字体大小。
从 langchain 的 UnstructuredFileLoader 中提取文本。