我正在用Python解析一些pdf。这些PDF以视觉方式组织成行和列。pdftohtml脚本将这些pdf转换为XML格式,其中充满了松散的标记,这些标记没有任何层次结构。然后,我的代码需要将这些标记重新排序成行。在
由于每个标记都有类似于“top”或“left”坐标的属性,所以我编写了代码将具有相同“top”坐标的项附加到列表中。这个列表实际上是一行。在
我的代码首先遍历页面,找到所有唯一的“top”值,并将它们附加到tops列表中。然后它会迭代这个tops列表。对于每个唯一的top值,它搜索具有该“top”值的所有项,并将它们添加到行列表中。在for side in page:
tops = list( set( [ d['top'] for d in side ] ) )
tops.sort()
for top in tops:
row = []
for blob in side:
if int(blob['top']) == int(top):
row.append(blob)
rows.append(row)
这段代码对于我正在解析的大多数pdf都非常有用。但有些情况下,在同一行的项目有不同的顶部值,稍微相差一到两个。在
我正在尝试调整我的代码,使其变得更模糊。在
底部的比较似乎很容易修复。像这样:
^{pr2}$
但是,我首先创建的唯一的最高值列表是个问题。我使用的代码是tops = list( set( [ d['top'] for d in side ] ) )
在这些边缘情况下,我最终得到的列表如下:[925, 946, 966, 995, 996, 1015, 1035]
我如何调整代码以避免列表中出现“995”和“996”?我想确保当整数在1或2之间时,我只得到一个值。在