解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

解析 unstructured pdfminer_utils.py rect_to_bbox 坐标转换函数

    • [1. 函数定义](#1. 函数定义)
    • [2. 函数说明](#2. 函数说明)
    • [3. 函数实现](#3. 函数实现)
    • 举例说明
    • 总结

今天,我们来学习一个有趣的Python函数。这个函数可以帮助我们转换PDF文档中的坐标。虽然听起来很复杂,但是我们可以通过一个简单的例子来理解它。

1. 函数定义

python 复制代码
def rect_to_bbox(
    rect: Tuple[float, float, float, float],
    height: float,
) -> Tuple[float, float, float, float]:

这行代码定义了一个名为rect_to_bbox的函数。它需要两个参数:

  • rect: 这是一个包含4个小数的元组,代表PDF中一个矩形的坐标。
  • height: 这是一个小数,表示PDF页面的高度。

函数会返回一个新的包含4个小数的元组,这个元组代表转换后的坐标。

2. 函数说明

python 复制代码
"""
Converts a PDF rectangle coordinates (x1, y1, x2, y2) to a bounding box in the specified
coordinate system where the vertical axis is measured from the top of the page.
"""

这段注释解释了函数的作用:它把PDF中的矩形坐标转换成一个新的坐标系统。在新的系统中,我们从页面的顶部开始测量竖直方向的距离。

3. 函数实现

python 复制代码
x1, y2, x2, y1 = rect
y1 = height - y1
y2 = height - y2
return (x1, y1, x2, y2)

这是函数的主要部分。让我们一步步来看:

  1. x1, y2, x2, y1 = rect: 这行代码把rect中的4个数字分别赋值给x1, y2, x2, y1
  2. y1 = height - y1: 这行代码计算新的y1值。
  3. y2 = height - y2: 这行代码计算新的y2值。
  4. return (x1, y1, x2, y2): 最后,函数返回新的坐标。

举例说明

想象你有一张很大的纸(这就是我们的PDF页面),纸的高度是100厘米。

在这张纸上,有一个小方框,它的坐标是(10, 20, 30, 40)。这里:

  • 10 是左边缘到纸左边的距离
  • 20 是下边缘到纸底部的距离
  • 30 是右边缘到纸左边的距离
  • 40 是上边缘到纸底部的距离

但是,我们想要改变测量方式。我们想从纸的顶部开始测量,而不是从底部。

这时,我们就可以使用rect_to_bbox函数:

python 复制代码
new_coordinates = rect_to_bbox((10, 20, 30, 40), 100)

函数会这样计算:

  1. x1 还是 10 (左边缘到纸左边的距离不变)
  2. 新的y1 = 100 - 40 = 60 (从顶部到上边缘的距离)
  3. x2 还是 30 (右边缘到纸左边的距离不变)
  4. 新的y2 = 100 - 20 = 80 (从顶部到下边缘的距离)

所以,new_coordinates的值会是(10, 60, 30, 80)。

这就像我们把纸翻了个个,从上面开始量尺寸,而不是从下面开始。但是左右的距离保持不变。

通过这种方式,我们就可以更方便地处理PDF中的坐标了!

总结

这个函数虽然看起来复杂,但它其实就是在帮我们"翻转"坐标系。它让我们可以更容易地理解和使用PDF中的位置信息。

相关推荐
engchina2 个月前
PDF 中图表的解析探究
人工智能·pdf·rag·ragflow·gptpdf·unstructured·pdf_parser
engchina2 个月前
解析 pdfminer layout.py LAParams类及其应用实例
开发语言·python·pdfminer
linmoo19863 个月前
检索增强生成RAG系列3--RAG优化之文档处理
embedding·向量数据库·rag·pypdf·文档分块·pdfminer