从XML或PDF格式的下一个同级中提取PyQuery和PDFQuery文本

2024-09-27 21:30:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用PDFQuery包从PDF中提取信息。信息不是每次都在同一个位置,所以我需要一个查询标签。首先,我编写了函数:

def clean_text_data(text):
      return text.split(':')[1]

然后我编写了一个函数来提取文本:

Date = clean_text_data(pdf.pq('LTTextLineHorizontal:contains("Date")').text())

然而,问题是(出于某种原因)几乎所有的数据都在下一个“LTTextHorizontal”上

XML如下所示:

<LTTextLineHorizontal bbox="[58.501, 377.094, 78.501, 385.094]" height="8.0" width="20.0" word_margin="0.1" x0="58.501" x1="78.501" y0="377.094" y1="385.094"><LTTextBoxHorizontal bbox="[58.501, 377.094, 78.501, 385.094]" height="8.0" index="39" width="20.0" x0="58.501" x1="78.501" y0="377.094" y1="385.094">Date: </LTTextBoxHorizontal></LTTextLineHorizontal>
<LTTextLineHorizontal bbox="[107.249, 377.334, 147.281, 385.334]" height="8.0" width="40.032" word_margin="0.1" x0="107.249" x1="147.281" y0="377.334" y1="385.334"><LTTextBoxHorizontal bbox="[107.249, 377.334, 147.281, 385.334]" height="8.0" index="40" width="40.032" x0="107.249" x1="147.281" y0="377.334" y1="385.334">02/26/2020 </LTTextBoxHorizontal></LTTextLineHorizontal>

这里的日期是2020年2月26日,但它在紧接着的方框中。如何创建一个函数来提取以下框


Tags: 函数textclean信息datadatewidthx1
1条回答
网友
1楼 · 发布于 2024-09-27 21:30:19

你可以这样做:

label = pdf.pq('LTTextLineHorizontal:contains("Date")')
    left_corner = float(label.attr('x0'))
    bottom_corner = float(label.attr('y0'))

在第一部分中,我将查找包含“Date”的PDF区域,并提取其边界框的源坐标,因此x0:y0对应于写入“Date”的位置的左下角

    name = pdf.pq('LTTextLineHorizontal:in_bbox("%s, %s, %s, %s")' % (
        left_corner, bottom_corner - 12, left_corner + 350, bottom_corner)).text()

之后,我偏移这些坐标以创建一个新的bbox,它包含我实际查找的信息,我得到它的.text()

坐标以点为单位进行偏移,可以使用Acrobat标尺进行测量

来源如下:https://pypi.org/project/pdfquery/#quick-start

《快速入门指南》有一个非常好的例子

相关问题 更多 >

    热门问题