我有一个包含文本和表格的 pdf。我想提取它们两个,但是当我使用 extract_text 函数时,它也会提取表内的内容。我只想提取表外的文本,并且可以使用 extract_tables 函数提取表。
我已经使用仅包含表格但仍然 extract_text 的 pdf 进行了测试,它还提取了我想使用 extract_tables 函数提取的表格内容。
我有一个包含文本和表格的 pdf。我想提取它们两个,但是当我使用 extract_text 函数时,它也会提取表内的内容。我只想提取表外的文本,并且可以使用 extract_tables 函数提取表。
我已经使用仅包含表格但仍然 extract_text 的 pdf 进行了测试,它还提取了我想使用 extract_tables 函数提取的表格内容。
您可以尝试使用以下代码
import pdfplumber
# Import the PDF.
pdf = pdfplumber.open("file.pdf")
# Load the first page.
p = pdf.pages[0]
# Table settings.
ts = {
"vertical_strategy": "lines",
"horizontal_strategy": "lines",
}
# Get the bounding boxes of the tables on the page.
bboxes = [table.bbox for table in p.find_tables(table_settings=ts)]
def not_within_bboxes(obj):
"""Check if the object is in any of the table's bbox."""
def obj_in_bbox(_bbox):
"""See https://github.com/jsvine/pdfplumber/blob/stable/pdfplumber/table.py#L404"""
v_mid = (obj["top"] + obj["bottom"]) / 2
h_mid = (obj["x0"] + obj["x1"]) / 2
x0, top, x1, bottom = _bbox
return (h_mid >= x0) and (h_mid < x1) and (v_mid >= top) and (v_mid < bottom)
return not any(obj_in_bbox(__bbox) for __bbox in bboxes)
print("Text outside the tables:")
print(p.filter(not_within_bboxes).extract_text())
我正在使用.filter()
pdfplumber 提供的方法删除落在任何表格边界框内的任何对象,并创建页面的过滤版本,然后从中提取文本。
由于您尚未共享 PDF,因此我使用的表格设置可能不起作用,但您可以更改它们以满足您的需要。