关于古风的网站建设项目,专业做网站 上海,濮阳信息港网首页,蒙文网站建设情况汇报大型语言模型已经席卷了互联网#xff0c;导致更多的人没有认真关注使用这些模型最重要的部分#xff1a;高质量的数据#xff01;
本文旨在提供一些有效从任何类型文档中提取文本的技术。
Python库
本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一个…大型语言模型已经席卷了互联网导致更多的人没有认真关注使用这些模型最重要的部分高质量的数据
本文旨在提供一些有效从任何类型文档中提取文本的技术。
Python库
本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一个单页PDF文件可在以下链接获取
https://github.com/keitazoumana/Experimentation-Data/blob/main/Experimentation_file.pdf
由于Pytesseract和easyOCR可以处理图像因此在执行内容提取之前需要将PDF文件转换为图像。可以使用pypdfium2进行转换这是一个用于处理PDF文件的强大库其实现如下
pip install pypdfium2以下函数以PDF作为输入并将PDF的每一页作为图像列表返回。
def convert_pdf_to_images(file_path, scale300/72):pdf_file pdfium.PdfDocument(file_path)page_indices [i for i in range(len(pdf_file))]renderer pdf_file.render(pdfium.PdfBitmap.to_pil,page_indices page_indices, scale scale,)final_images [] for i, image in zip(page_indices, renderer):image_byte_array BytesIO()image.save(image_byte_array, formatjpeg, optimizeTrue)image_byte_array image_byte_array.getvalue()final_images.append(dict({i:image_byte_array}))return final_images现在我们可以使用display_images函数来可视化PDF文件的所有页面。
def display_images(list_dict_final_images):all_images [list(data.values())[0] for data in list_dict_final_images]for index, image_bytes in enumerate(all_images):image Image.open(BytesIO(image_bytes))figure plt.figure(figsize (image.width / 100, image.height / 100))plt.title(f----- Page Number {index1} -----)plt.imshow(image)plt.axis(off)plt.show()通过组合上述两个函数我们可以得到以下结果
convert_pdf_to_images convert_pdf_to_images(Experimentation_file.pdf)
display_images(convert_pdf_to_images)PDF以图像格式可视化
深入文本提取过程
Pytesseract
PytesseractPython-tesseract是用于从图像中提取文本信息的Python OCR工具可以使用以下pip命令进行安装
pip install pytesseract以下的辅助函数使用了 Pytesseract 的 image_to_string() 函数从输入图像中提取文本。
from pytesseract import image_to_string
def extract_text_with_pytesseract(list_dict_final_images):image_list [list(data.values())[0] for data in list_dict_final_images]image_content []for index, image_bytes in enumerate(image_list):image Image.open(BytesIO(image_bytes))raw_text str(image_to_string(image))image_content.append(raw_text)return \n.join(image_content)可以使用 extract_text_with_pytesseract 函数提取文本如下所示
text_with_pytesseract extract_text_with_pytesseract(convert_pdf_to_images)
print(text_with_pytesseract)成功执行以上代码将生成以下结果
This document provides a quick summary of some of Zoumana’s article on Medium.
It can be considered as the compilation of his 80 articles about Data Science, Machine Learning and
Machine Learning Operations.
...
Pytesseract was able to extract the content of the image.
Here is how it managed to do it!
Pytesseract starts by identifying rectangular shapes within the input image from top-right to bottom-right. Then it extracts the content of the individual images, and the final result is the concatenation of those extracted content. This approach works perfectly when dealing with column-based PDFs and image documents.
...Pytesseract 首先通过从图像的右上角到右下角识别矩形形状。然后它提取各个图像的内容最终的结果是这些提取内容的串联。这种方法在处理基于列的 PDF 和图像文档时效果非常好。
easyOCR
easyOCR 也是一个用于光学字符识别的开源 Python 库目前支持提取 80 多种语言的文本。easyOCR需要安装Pytorch 和 OpenCV可以使用以下指令安装
!pip install opencv-python-headless4.1.2.30根据您的操作系统安装 Pytorch 模块的方法可能不同。但所有的说明都可以在官方页面上找到。现在我们来安装 easyOCR 库
!pip install easyocr在使用 easyOCR 时因为它支持多语言所以在处理文档时需要指定语言。通过其 Reader 模块设置语言指定语言列表。例如fr 用于法语en 用于英语。语言的详细列表在此处可用。
from easyocr import Reader# Load model for the English language
language_reader Reader([en])文本提取过程在extract_text_with_easyocr 函数中实现
def extract_text_with_easyocr(list_dict_final_images):image_list [list(data.values())[0] for data in list_dict_final_images]image_content []for index, image_bytes in enumerate(image_list):image Image.open(BytesIO(image_bytes))raw_text language_reader.readtext(image)raw_text .join([res[1] for res in raw_text])image_content.append(raw_text)return \n.join(image_content)我们可以如下执行上述函数
text_with_easy_ocr extract_text_with_easyocr(convert_pdf_to_images)
print(text_with_easy_ocr)easyOCR 的结果
与 Pytesseract 相比easyOCR 的效果似乎不太高效。例如它能够有效地读取前两个段落。然而它不是将每个文本块视为独立的文本而是使用基于行的方法进行读取。例如第一个文本块中的字符串“Data Science section covers basic to advanced”已与第二个文本块中的“overfitting when training computer vision”组合在一起这种组合完全破坏了文本的结构并使最终结果产生偏差。
PyPDF2
PyPDF2 也是一个专门用于 PDF 处理任务的 Python 库例如文本和元数据的检索、合并、裁剪等。
!pip install PyPDF2提取逻辑实现在 extract_text_with_pyPDF 函数中
def extract_text_with_pyPDF(PDF_File):pdf_reader PdfReader(PDF_File)raw_text for i, page in enumerate(pdf_reader.pages):text page.extract_text()if text:raw_text textreturn raw_text
text_with_pyPDF extract_text_with_pyPDF(Experimentation_file.pdf)
print(text_with_pyPDF)使用 PyPDF 库进行文本提取
提取过程快速而准确甚至保留了原始字体大小。PyPDF 的主要问题是它不能有效地从图像中提取文本。
LangChain
LangChain 的 UnstructuredImageLoader 和 UnstructuredFileLoader 模块可分别用于从图像和文本/PDF 文件中提取文本并且在本节中将探讨这两个选项。
首先我们需要按照以下方式安装 langchain 库
!pip install langchain从图像中提取文本
from langchain.document_loaders.image import UnstructuredImageLoader以下是提取文本的函数
def extract_text_with_langchain_image(list_dict_final_images):image_list [list(data.values())[0] for data in list_dict_final_images]image_content []for index, image_bytes in enumerate(image_list):image Image.open(BytesIO(image_bytes))loader UnstructuredImageLoader(image)data loader.load()raw_text data[index].page_contentimage_content.append(raw_text)return \n.join(image_content)现在我们可以提取内容
text_with_langchain_image extract_text_with_langchain_image(convert_pdf_to_images)
print(text_with_langchain_image)来自 langchain UnstructuredImageLoader 的文本提取
该库成功高效地提取了图像的内容。
从 PDF 中提取文本
以下是从 PDF 中提取内容的实现
from langchain.document_loaders import UnstructuredFileLoader
def extract_text_with_langchain_pdf(pdf_file):loader UnstructuredFileLoader(pdf_file)documents loader.load()pdf_pages_content \n.join(doc.page_content for doc in documents)return pdf_pages_content
text_with_langchain_files extract_text_with_langchain_pdf(Experimentation_file.pdf)
print(text_with_langchain_files)类似于 PyPDF 模块langchain 模块能够生成准确的结果同时保持原始字体大小。 从 langchain 的 UnstructuredFileLoader 中提取文本
技术交流
建了技术交流群想要进交流群、获取原版资料的同学可以直接加微信号dkl88194。加的时候备注一下研究方向 学校/公司CSDN即可。然后就可以拉你进群了。 方式①、添加微信号dkl88194备注来自CSDN 技术交流 方式②、微信搜索公众号Python学习与数据挖掘后台回复加群 资料1 资料2