GPTPDF:293行代码,GPT-4o颠覆PDF板式分析,每页仅需1美分!

迎接智能文档处理新时代

PDF格式以其跨平台兼容性和稳定性,成为了学术论文、技术文档、电子书籍等领域的首选格式。然而,对PDF文档内容的提取和编辑却并非易事,传统的光学字符识别(OCR)技术在处理复杂布局、数学公式和图表时往往力不从心。近年来,随着大型语言模型(LLM)的迅速发展,尤其是GPT-4o等视觉语言模型(VLLM)的出现,为PDF解析领域带来了全新的可能性。

GPTPDF:293行代码实现PDF到Markdown的优雅转身

GPTPDF项目正是这样一款基于GPT-4o的开源工具,它仅用293行Python代码就实现了将PDF文档转换为Markdown格式的功能。GPTPDF利用GPT-4o强大的视觉和语言理解能力,能够精准识别和解析PDF文档中的文本、图片、表格、数学公式甚至图表等元素,并将其转换为结构清晰、易于编辑的Markdown格式,为PDF文档处理提供了一种高效便捷的解决方案。

图片

更令人惊喜的是,GPTPDF的平均每页解析成本仅为 0.013 美元, 这意味着处理 100页的PDF文档仅需约1.3美元,对于需要处理大量PDF文档的用户来说,无疑是一个非常经济实惠的选择。

GPTPDF工作原理:视觉与语言的完美融合

GPTPDF的工作流程可以概括为两个主要阶段:PDF预处理GPT-4o解析

  1. 1. PDF预处理:

    • • 首先,GPTPDF利用PyMuPDF库加载PDF文件,并遍历每一页。

    • • 对于每一页:

      • • 调用 _parse_rects() 函数识别并标记所有非文本区域,包括图片、表格、图表等。识别过程中,会使用 Shapely 库对相邻的矩形区域进行合并,例如将属于同一表格的单元格合并成一个大的矩形区域,以提高解析精度。

      • • 将识别出的区域从页面中分割出来,并保存为单独的图片文件。

      • • 将分割后的图片和相应的区域信息传递给 GPT-4o。

  2. 2. GPT-4o解析:

    • • GPTPDF 使用 GeneralAgent 库调用 GPT-4o API,并将预处理阶段准备好的图片和区域信息传递给 GPT-4o。

    • • GPT-4o 根据接收到的图片和区域信息,识别图片中的内容,并将其转换为 Markdown 格式的文本。

    • • GPTPDF 将 GPT-4o 返回的 Markdown 文本片段整合到一起,生成最终的 Markdown 文件。

GPTPDF代码实现逻辑详解

以下是 GPTPDF 代码的关键部分解析:

1. 区域识别与合并

def _parse_rects(page):
"""
    解析页面中的矩形元素
    """
return _parse_images(page)+ _parse_drawings(page)

def_parse_drawings(page):
"""
    解析页面中的绘图元素,合并相邻的矩形
    """
    drawings = page.get_drawings()
    rect_list =[drawing['rect']for drawing in drawings]

# 转成 shapely 的 矩形对象
    rect_list =[sg.box(rect[0], rect[1], rect[2], rect[3])for rect in rect_list]

# 合并矩形列表
    merged_rects = _merge_rects(rect_list, distance=10, horizontal_distance=100)

# ...
return merged_rects

def_merge_rects(rect_list, distance=20, horizontal_distance=None):
"""
    合并矩形列表
    """
    merged =True
while merged:
# ...
for other_rect in rect_list:
# ...
                    rect = _union_rects(rect, other_rect)
# ...
return rect_list

这段代码展示了 GPTPDF 如何识别和合并PDF页面中的矩形区域。_parse_rects() 函数调用 _parse_images() 和 _parse_drawings() 函数分别解析图片和绘图元素,并将它们的结果合并。 _parse_drawings() 函数首先获取页面中所有的绘图元素,然后将它们转换为 Shapely 库中的矩形对象,并使用 _merge_rects() 函数对相邻的矩形进行合并。_merge_rects() 函数利用 Shapely 库提供的空间操作功能,将距离小于设定阈值的矩形合并成一个大的矩形,从而实现区域合并的目的。

2. 图片分割

def _parse_pdf_to_images(pdf_path, output_dir='./'):
"""
    parse pdf to images and save to output_dir
    """
# ...
        rects = _parse_rects(page)
# ...
for index, rect inenumerate(rects):
# ...
            fitz_rect = fitz.Rect(rect)
# 从页面中分割出矩形区域
            pix = page.get_pixmap(clip=fitz_rect, matrix=fitz.Matrix(4,4))
# ...
            pix.save(os.path.join(output_dir, name))
# ...
return image_infos

_parse_pdf_to_images() 函数负责将PDF页面转换为图片,并根据识别出的矩形区域分割图片。在遍历每个矩形区域时,GPTPDF 使用 PyMuPDF 库提供的 get_pixmap() 方法,将矩形区域对应的像素数据提取出来,并保存为单独的图片文件。

3. 调用GPT-4o实现内容解析

def _gpt_parse_images(image_infos, output_dir='./', api_key=None, base_url=None, model='gpt-4o', verbose=False, gpt_worker=1):
"""
    parse images to markdown content
    """
# ...
def_process_page(index, image_info):
# ...
# 调用 GPT-4o API
        content = agent.run([local_prompt,{'image': page_image}], show_stream=verbose)
return index, content
# ...
return'\n\n'.join(contents)

_gpt_parse_images() 函数使用 GeneralAgent 库调用 GPT-4o API,并将分割后的图片和区域信息传递给 GPT-4o 进行内容解析。agent.run() 方法会发送 API 请求,并将 GPT-4o 返回的结果存储在 content 变量中。

GPTPDF的优势:精准、高效、低成本

相较于传统的PDF解析方法,GPTPDF主要具有以下三个方面的优势:

  1. 1. 精准的元素识别: 得益于GPT-4o强大的视觉理解能力,GPTPDF能够识别和解析PDF文档中复杂的排版、数学公式、表格、图片和图表等元素,并且准确率很高。

  2. 2. 高效的转换速度: GPTPDF采用了简洁高效的代码实现,并支持多线程处理,因此可以快速地将PDF文档转换为Markdown格式。

  3. 3. 低廉的使用成本: GPTPDF的使用成本非常低廉,平均每页PDF文档的解析成本仅为 0.013 美元,这对需要处理大量PDF文档的用户非常友好。

GPTPDF的应用前景:释放文档处理潜能

GPTPDF作为一个功能强大且易于使用的PDF解析工具,在许多领域都有着广泛的应用前景,例如: 

  1. 1. 学术研究: 研究人员可以使用GPTPDF快速提取学术论文中的关键信息,例如公式、图表和结论等,从而提高文献阅读和分析的效率。

  2. 2. 信息提取: GPTPDF可以用于从大量PDF文档中提取特定信息,例如合同条款、财务数据、产品规格等,为企业决策提供数据支持。

  3. 3. 自动化办公: GPTPDF可以与其他自动化工具集成,实现PDF文档的自动处理,例如自动归档、内容检索、信息翻译等,从而提高办公效率。

相关链接

  • • GPTPDF GitHub仓库:https://github.com/tangming2005/gptpdf

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值