Extrahieren Sie Tabellen aus PDF -DateienPython

Python-Programme
Guest
 Extrahieren Sie Tabellen aus PDF -Dateien

Post by Guest »

Ich recherchiere Forschungen zur P-Hacking, für die genaue Extrahieren von Tabellen aus veröffentlichten akademischen Papieren erforderlich sind. Ich habe zu diesem Zweck eine große Anzahl von PDF -Dateien heruntergeladen. Leider können Python -Pakete wie Fitz und Camelot die Tabellen nicht direkt aus diesen PDFs extrahieren. Als Problemumgehung habe ich ein YOLO-basierter Layout-Erkennungsmodell verwendet, um die Stellen jeder Tabelle zu identifizieren. Während dieser Ansatz es mir ermöglicht, den Textinhalt der Tabellen zu extrahieren, verliere ich die Strukturinformationen (z. B. die Ausrichtung von Zeilen und Spalten) und das von mir verwendete OCR -Modell ist nicht immer genau.
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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post