Können Sie bessere Methoden oder Tools vorschlagen, um den Extraktionsprozess zu verbessern und sicherzustellen, dass sowohl der Inhalt als auch die Struktur der Tabellen erhalten bleiben? < /p>
P.S. Ich entschuldige mich, aber aufgrund von Urheberrechtsbeschränkungen kann ich die PDF -Dateien, an denen ich arbeite, nicht hochladen. < /P>
Code: Select all
import json
import os
import fitz
def get_tables_loc(layout_json: dict) -> list:
pdf_info = layout_json['pdf_info']
layout = {page: pdf_info[page]['tables'] for page in range(len(pdf_info)) if
pdf_info[page]['tables']}
tables_loc = []
for page in layout.keys():
for table in layout[page]:
try:
table_body = [block for block in table['blocks'] if block['type'] == 'table_body']
if not table['bbox'] or not table_body:
continue
tables_loc.append((page, table['bbox']))
except Exception as e:
print(e)
return tables_loc
def extract_tables(path_paper):
path_layout = os.path.join(path_paper, "layout.json")
path_origin = os.path.join(path_paper, "origin.pdf")
with open(path_layout, "r", encoding="utf-8") as f:
layout_json = json.load(f)
tables_loc = get_tables_loc(layout_json)
doc = fitz.open(path_origin)
for page, table_loc in tables_loc:
rect = fitz.Rect(*table_loc)
table_finder = doc[page].find_tables(clip=rect)
if table_finder.tables:
table_result = table_finder.tables[0].to_pandas()
else:
table_text = doc[page].get_text("text", clip=rect)