如何分割PDFQuery刮库中使用的.extract的输出

2024-04-19 15:13:19 发布

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

我对pdf查询库有问题。这几天我一直在想这个问题,但我好像搞不懂。你知道吗

代码:

def data_validation(x,y,x1,y1,pdf,width_scale,height_scale):

    values = pdf.extract([
        ('with_formatter', 'text'),
        ('with_parent','LTPage[pageid=\'1\']'),
        ('values', 'LTTextLineHorizontal:in_bbox("%s,%s,%s,%s")' % ((x1*width_scale), ((800-y)*height_scale), (x*width_scale), ((800-y1)*height_scale)))
    ])

    return values

函数的输入变量(数据验证)是一个包含两个对象的边界框(边界框值),但输出似乎已合并为一个值(输出)。你知道吗

边界框值:

bbox #1 - Exhibit A Sample Contract
bbox #2 - Sample Contract

输出:

{' values': 'Exhibit A Sample Contract Sample Contract'}

输出不应该是{values':'Exhibit A Sample Contract','Sample Contract},一个有2个值的键吗?你知道吗

希望有人能帮我,告诉我做错了什么。你知道吗


Tags: sample代码pdfwithwidth边界valuesx1
1条回答
网友
1楼 · 发布于 2024-04-19 15:13:19

在对我自己遇到的一个类似问题进行了一些思考之后,我想我应该发布我的修复程序,因为这样做会大大有帮助。你知道吗

与要求pyquery将XML节点格式化为文本作为PDF提取('with_formatter', 'text')的一部分不同,更容易提取为XML对象,然后再提取文本。你知道吗

values = pdf.extract([
    #('with_formatter', 'text'),
    ('with_parent','LTPage[pageid=\'1\']'),
    ('values', 'LTTextLineHorizontal:in_bbox("%s,%s,%s,%s")' % ((x1*width_scale), ((800-y)*height_scale), (x*width_scale), ((800-y1)*height_scale)))
])

这将导致字典values类似于以下内容:

{' values': [<LTTextLineHorizontal>, <LTTextLineHorizontal>]}

我们现在可以从values中的单个<LTTextLineHorizontal>XML节点构建一个列表:

for key,val in values.items():
    if len(val) >= 1: # if we found multiple bbox'
        resultingText = [i.text() for i in val.items('LTTextBoxHorizontal')]
    elif(len(val)) == 1: # if we found only one bbox
        resultingText = [val.text()]
    else: # no bbox found
        resultingText = []
return(resultingText)

输出resultingText

['Exhibit A Sample Contract', 'Sample Contract']

相关问题 更多 >