PDFs und andere Datenformate in Python parsen

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.

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.

«
»
Avatar de Florian Zyprian

Neueste Artikel