python pdf parsen

PDFs und andere Datenformate in Python parsen

Florian Zyprian

Als Python Entwickler stoßen wir oft auf Situationen, in denen wir Daten aus verschiedenen Quellen und Formaten wie PDFs, CSV, HTML und mehr extrahieren müssen. In diesem Artikel werden wir uns eingehend mit dem Parsen von Daten aus PDF-Dateien beschäftigen und einige Python-Pakete vorstellen, die für das Parsen anderer Datenformate nützlich sind.

Dieser Artikel wurde auf Deutsch verfasst und redaktionell überprüft. Weitere Sprachen stehen als automatische Übersetzung zur Verfügung. Wir freuen uns über Feedback am Ende des Artikels.

PDF-Dateien in Python parsen

PDF ist ein Standarddateiformat, das umfassend zum Teilen und Drucken von Dokumenten verwendet wird. Leider ist es nicht das einfachste Format, wenn es um die Datenextraktion geht, aufgrund seiner komplexen Struktur. Glücklicherweise bietet Python mehrere Bibliotheken, die uns helfen können, Daten aus PDF-Dateien zu extrahieren, wie PyPDF2 und PDFMiner.

PyPDF2

PyPDF2 ist eine reine Python-Bibliothek, die als PDF-Toolkit entwickelt wurde. Sie ist in der Lage, Dokumentinformationen zu extrahieren, Dokumente seitenweise zu teilen, Seiten zusammenzuführen, Seiten zuzuschneiden und PDF-Dateien zu verschlüsseln und zu entschlüsseln.

Hier ist ein einfaches Beispiel für die Verwendung von PyPDF2 zum Extrahieren von Text aus einer PDF-Datei:

import PyPDF2

def extract_text_from_pdf(file_path):
    pdf_file_obj = open(file_path, 'rb')
    pdf_reader = PyPDF2.PdfFileReader(pdf_file_obj)

    text = ""
    for page_num in range(pdf_reader.numPages):
        page_obj = pdf_reader.getPage(page_num)
        text += page_obj.extractText()

    pdf_file_obj.close()

    return text

print(extract_text_from_pdf('example.pdf'))

# Weitere Informationen gibt es in unserem PyPDF2 Post.

PDFMiner

Während PyPDF2 ein hervorragendes Tool für grundlegende PDF-Verarbeitungsaufgaben ist, leistet es nicht immer gute Arbeit, wenn es darum geht, Text zu extrahieren, der sein ursprüngliches Layout beibehält. Hier kommt PDFMiner ins Spiel. Es konzentriert sich auf das Abrufen und Analysieren von Textdaten aus PDF-Dateien.

Hier ist ein einfaches Beispiel, wie man PDFMiner verwendet, um Text zu extrahieren:

from pdfminer.high_level import extract_text

def extract_text_from_pdf(file_path):
    text = extract_text(file_path)
    return text

print(extract_text_from_pdf('example.pdf'))

PDFQuery

PDFQuery ist eine schlanke Python-Bibliothek, die eine Kombination aus XML und jQuery-Syntax verwendet, um PDFs zu parsen. Es ist besonders hilfreich, wenn Sie die genaue Position der Daten in einer PDF-Datei kennen, die Sie extrahieren möchten.

import pdfquery

def extract_data_from_pdf(file_path):
    pdf = pdfquery.PDFQuery(file_path)
    pdf.load()
    label = pdf.pq('LTTextLineHorizontal:contains("Your Label")')
    return label

data = extract_data_from_pdf('Beispiel.pdf')
print(data)

Tabula-py

Wenn Ihre PDFs aus Tabellen bestehen, ist Tabula-py die ideale Bibliothek für die Extraktion. Es ist ein einfacher Wrapper für Tabula, der das Lesen von Tabellen in einem PDF in DataFrame-Objekte ermöglicht.

import tabula

def extract_table_from_pdf(file_path):
    df = tabula.read_pdf(file_path, pages='all')
    return df

df = extract_table_from_pdf('Beispiel.pdf')
print(df)

PDFBox

PDFBox ist eine Java-Bibliothek, die nützlich für PDF-bezogene Aufgaben ist und auch einen Python-Wrapper, python-pdfbox, bietet. Obwohl die Funktionalität im Vergleich zur ursprünglichen Java-Bibliothek etwas eingeschränkt ist, kann sie Text, Metadaten und Bilder extrahieren.

import pdfbox

def extract_text_from_pdf(file_path):
    p = pdfbox.PDFBox()
    text = p.extract_text(file_path)
    return text

text = extract_text_from_pdf('Beispiel.pdf')
print(text)

Slate

Slate baut auf PDFMiner auf, um eine einfachere API für die Textextraktion aus PDF-Dateien zu bieten. Es wird jedoch seit mehreren Jahren nicht mehr gewartet, so dass es möglicherweise nicht perfekt mit neueren Python-Versionen funktioniert.

import slate

with open('Beispiel.pdf', 'rb') as f:
    document = slate.PDF(f)
    text = " ".join(document)
print(text)

PDFPlumber

Diese Bibliothek bietet umfangreiche Funktionen zum Extrahieren von Text, Tabellen und sogar visuellen Elementen aus PDFs. Sie baut auf PDFMiner auf und bietet eine benutzerfreundlichere API.

import pdfplumber

def extract_text_from_pdf(file_path):
    with pdfplumber.open(file_path) as pdf:
        first_page = pdf.pages[0]
        text = first_page.extract_text()
    return text

print(extract_text_from_pdf('Beispiel.pdf'))

Jede dieser Bibliotheken hat ihre eigenen Stärken und Schwächen, und die beste Wahl hängt von den Details der vorliegenden Aufgabe ab. Bitte bewerten Sie sorgfältig Ihre Anforderungen und die PDF-Dateien, mit denen Sie arbeiten, wenn Sie eine Bibliothek auswählen.

Konfuzio SDK

Konfuzio ist ein ausgefeiltes Software-Entwicklungskit (SDK), das hilft, Daten aus komplexen und unstrukturierten Dokumenten zu parsen, einschließlich PDFs. Die Stärke von Konfuzio liegt in seiner Fähigkeit, maschinelles Lernen für die Informationsextraktion zu nutzen. Es ist nicht nur ein Textextraktor – es kann den Kontext und die Beziehungen in Ihrem Dokument verstehen.

Hier geht es zu den PDF Tutorials mit dem Python SDK von Konfuzio.

Andere Datenparser in Python

Jenseits von PDFs bietet Python eine Fülle von Bibliotheken zum Parsen verschiedener Datenformate. Hier sind ein paar Beispiele.

CSV-Parsing: pandas

Die pandas-Bibliothek ist ein leistungsfähiges Werkzeug zur Datenmanipulation, das auch das Parsen von CSV-Dateien vereinfacht:

import pandas as pd

def parse_csv(file_path):
    df = pd.read_csv(file_path)
    return df

df = parse_csv('example.csv')
print(df.head())

Dieses Skript liest eine CSV-Datei in einen pandas DataFrame ein, der eine 2-dimensionale beschriftete Datenstruktur mit möglicherweise unterschiedlichen Spaltentypen ist.

HTML-Parsing: Beautiful Soup

Beautiful Soup ist eine Python-Bibliothek, die zum Zweck des Web-Scrapings verwendet wird, um Daten aus HTML- und XML-Dateien zu ziehen.

from bs4 import BeautifulSoup
import requests

def parse_html(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup

soup = parse_html('https://www.example.com')
print(soup.prettify())

Dieses Skript holt den HTML-Inhalt einer Webseite und parst ihn in ein BeautifulSoup-Objekt, das Sie durchsuchen können, um Daten zu extrahieren.

JSON-Parsing: json

Die Standardbibliothek von Python enthält das json-Modul, das Ihnen das Kodieren und Parsen von JSON-Daten ermöglicht.

import json

def parse_json(json_string):
    data = json.loads(json_string)
    return data

data = parse_json('{"key": "value"}')
print(data)

Dieses Skript parst eine JSON-Zeichenkette in ein Python-Wörterbuch.

Schlussfolgerung

In diesem Artikel haben wir nur an der Oberfläche des Datenparsings in Python gekratzt. Abhängig von Ihren spezifischen Bedürfnissen und der Komplexität Ihrer Daten müssen Sie möglicherweise auch andere Bibliotheken und Tools in Betracht ziehen. Die hier bereitgestellten Pakete und Beispiele sollten Ihnen jedoch einen guten Ausgangspunkt für die meisten gängigen Daten-Parsing-Aufgaben bieten.

Über mich

0 Kommentare

Schreiben Sie einen Kommentar

Weitere Artikel

python NaN

NaN Python – Umgang mit NaN-Werten in Python

NaN, was für "Not a Number" steht, ist ein spezieller Gleitkommawert in Python (und vielen anderen Programmiersprachen), der dazu dient,…

Zum Artikel
Date Regex Python

Regex für Datumsangaben in Python: Ein Leitfaden

Hallo liebe Python-Entwickler, es ist nicht ungewöhnlich, dass wir in unserer täglichen Arbeit als EntwicklerInnen Datumsangaben verarbeiten müssen. Es gibt…

Zum Artikel

ZBar: Document AI – Effiziente Extraktion von Barcodes

In der Welt der Dokumentenverarbeitung und des Datenmanagements spielt die Fähigkeit, Barcodes schnell und genau zu dekodieren, eine entscheidende Rolle.…

Zum Artikel

    Arrow-up

    Dieser Artikel wurde auf Deutsch verfasst und redaktionell überprüft. Weitere Sprachen stehen als automatische Übersetzung zur Verfügung. Wir freuen uns über Feedback am Ende des Artikels.

    Navigation