Daten aus unstrukturiertem Text extrahieren
Sie erstellen eine Pipeline zur Informationsextraktion, die Rohtext wie E-Mails, Belege und Artikel einliest und strukturierte Felder mit Typen, Standardwerten und Validierung zurückgibt.
Daten aus unstrukturiertem Text extrahieren ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Problem der Information Extraction
Organisationen werden von unstrukturierten Texten überflutet: E-Mails, Support-Tickets, Verträge, Rechnungen, Nachrichtenartikel, medizinische Notizen und Beiträge in sozialen Medien. Wertvolle strukturierte Daten sind in diesen Texten verborgen, doch ihre manuelle Extraktion ist langsam, teuer und fehleranfällig. LLMs mit strukturierten Ausgaben ändern das: Sie können beliebige Texte lesen und vordefinierte Schemas in großem Maßstab mit angemessener Genauigkeit mit den relevanten Feldern befüllen.
Information Extraction (IE) bezeichnet das automatische Erkennen und Extrahieren strukturierter Fakten aus unstrukturierten Texten. LLM-basierte IE übertrifft frühere regelbasierte oder klassische NLP-Ansätze deutlich, da LLMs Kontext, Synonymie und implizite Informationen verstehen, ohne dass für jede Variante von Hand erstellte Regex-Muster erforderlich sind.
Häufige Anwendungsfälle für Extraktion
Information Extraction ermöglicht zahlreiche wertvolle Geschäftsanwendungen:
- Rechnungsverarbeitung: Lieferanten, Positionen, Beträge und Fälligkeitsdaten aus PDF-Rechnungen extrahieren, um die Automatisierung der Kreditorenbuchhaltung zu unterstützen
- Vertragsanalyse: Vertragsparteien, Gültigkeitsdaten, Zahlungsbedingungen und Kündigungsklauseln aus Rechtsdokumenten extrahieren
- Lebenslaufanalyse: Fähigkeiten, Berufserfahrung, Ausbildung und Kontaktdaten aus Lebensläufen für ATS-Systeme extrahieren
- Weiterleitung von Support-Tickets: Kategorie, Dringlichkeit, betroffenes Produkt und Kundenstufe extrahieren, um Tickets automatisch weiterzuleiten
- Nachrichtenüberwachung: Entitäten, Ereignisse und Stimmungen aus Nachrichtenartikeln für Wettbewerbsanalysen extrahieren
Aufbau einer E-Mail-Extraktionspipeline
Erstellen wir eine praktische Extraktionspipeline, die Kunden-E-Mails liest und daraus verwertbare strukturierte Daten extrahiert. Die Pipeline verwendet ein Pydantic-Schema, um genau festzulegen, welche Informationen aus jeder E-Mail benötigt werden, und verarbeitet die E-Mails anschließend im Batch.
import openai
from pydantic import BaseModel
from typing import List, Optional
from enum import Enum
client = openai.OpenAI()
class Priority(str, Enum):
urgent = 'urgent'
high = 'high'
normal = 'normal'
low = 'low'
class EmailExtraction(BaseModel):
subject_summary: str
sender_intent: str
product_mentioned: Optional[str]
issue_category: str # billing / technical / general / feedback
priority: Priority
action_required: bool
action_description: Optional[str]
customer_sentiment: str # positive / negative / neutral / frustrated
def extract_from_email(email_body: str) -> EmailExtraction:
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'You are an expert at analyzing customer emails and extracting structured information for a support team.'},
{'role': 'user', 'content': f'Analyze this customer email:\n\n{email_body}'}
],
response_format=EmailExtraction
)
return result.choices[0].message.parsedNamed Entity Recognition mit LLMs
Named Entity Recognition (NER) ist eine klassische Aufgabe der IE: Benannte Entitäten (Personen, Organisationen, Orte, Datumsangaben und Geldbeträge) in Texten zu erkennen und zu klassifizieren. LLMs vereinfachen NER erheblich, da Sie lediglich die gewünschten Entitäten beschreiben müssen und das Modell sie extrahiert, ohne dass ein speziell trainiertes NER-Modell erforderlich ist.
import openai
from pydantic import BaseModel
from typing import List, Optional
client = openai.OpenAI()
class NamedEntity(BaseModel):
text: str # The exact text as it appears
entity_type: str # PERSON / ORG / LOCATION / DATE / MONEY / PRODUCT
normalized: Optional[str] # Standardized form where applicable
class NERResult(BaseModel):
entities: List[NamedEntity]
text = '''
Apple Inc. CEO Tim Cook announced yesterday that the company will invest $1.2 billion
in a new manufacturing facility in Austin, Texas, expected to open in Q3 2026.
'''
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Extract all named entities from the text. Classify each as PERSON, ORG, LOCATION, DATE, MONEY, or PRODUCT.'},
{'role': 'user', 'content': text}
],
response_format=NERResult
)
for entity in result.choices[0].message.parsed.entities:
print(f'[{entity.entity_type}] {entity.text}')Dokumente in großem Maßstab extrahieren
Für Produktions-Extraktionspipelines, die Tausende von Dokumenten verarbeiten, benötigen Sie asynchrone Verarbeitung und eine Behandlung von Rate Limits. Ein typisches Muster verwendet asyncio mit einem Semaphore, um Dokumente parallel zu verarbeiten und dabei die Rate Limits der API einzuhalten.
import asyncio
import openai
from pydantic import BaseModel
from typing import List, Optional
async_client = openai.AsyncOpenAI()
class InvoiceExtraction(BaseModel):
vendor: str
total_amount: Optional[float]
currency: str
invoice_date: Optional[str]
async def extract_invoice(doc_text: str, semaphore: asyncio.Semaphore) -> InvoiceExtraction:
async with semaphore: # Limit concurrent requests
result = await async_client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Extract invoice data.'},
{'role': 'user', 'content': doc_text}
],
response_format=InvoiceExtraction
)
return result.choices[0].message.parsed
async def process_invoices(documents: List[str]):
sem = asyncio.Semaphore(5) # Max 5 concurrent requests
tasks = [extract_invoice(doc, sem) for doc in documents]
return await asyncio.gather(*tasks, return_exceptions=True)
# results = asyncio.run(process_invoices(invoice_texts))
print('Async pipeline defined - handles rate limits via semaphore')Umgang mit impliziten und abgeleiteten Informationen
LLMs können nicht nur ausdrücklich genannte, sondern auch abgeleitete oder implizite Informationen extrahieren. Wenn in einer Bewertung steht: „Ich benutze das seit einem Monat täglich, und es funktioniert immer noch perfekt“, kann das Modell Langlebigkeit als positive Eigenschaft ableiten, obwohl das Wort „Langlebigkeit“ nicht vorkommt. Das ist ein wesentlicher Vorteil gegenüber Regex-basierter Extraktion, die nur ausdrücklich vorhandene Informationen finden kann.
Diese Fähigkeit birgt jedoch ein Risiko: Das Modell kann zu viel ableiten und Felder mit Vermutungen statt mit Fakten füllen. Fügen Sie bei Extraktionen mit hohen Anforderungen (rechtlich, finanziell oder medizinisch) Ihrem Schema ein Feld confidence hinzu und weisen Sie das Modell an, seine Sicherheit zu bewerten. Markieren Sie Extraktionen mit geringer Sicherheit für die menschliche Prüfung.
Entwurf von Extraktions-Prompts
Die Qualität Ihrer Extraktion hängt maßgeblich vom Prompt-Design ab. Wichtige Grundsätze für Extraktions-Prompts:
- Mehrdeutige Felder definieren: Wenn „Datum“ Rechnungsdatum, Fälligkeitsdatum oder Eingangsdatum bedeuten kann, geben Sie genau an, welches Sie benötigen
- Beispiele für ungewöhnliche Formate bereitstellen: „Geben Sie für den Preis nur den numerischen Wert zurück, z. B. 29.99 statt $29.99“
- Normalisierung festlegen: „Normalisieren Sie Ländernamen auf ISO-3166-1-Alpha-2-Codes“
- Quelle der Extraktion angeben: „Extrahieren Sie nur aus der Betreffzeile, nicht aus dem E-Mail-Text“
Betrachten Sie den Extraktions-Prompt als präzise Spezifikation für eine menschliche Datenerfassungskraft: Jede Mehrdeutigkeit, die Sie im Prompt offenlassen, wird vom Modell uneinheitlich interpretiert.
Multi-Pass-Extraktion für komplexe Dokumente
Manche Dokumente sind zu komplex für eine Extraktion in einem einzigen Durchlauf, weil das vollständige Schema umfangreich ist, verschiedene Abschnitte unterschiedliches Fachwissen erfordern oder die Dokumentstruktur stark variiert. Bei der Multi-Pass-Extraktion wird die Aufgabe in aufeinanderfolgende Schritte aufgeteilt: Zuerst wird der Dokumenttyp klassifiziert, anschließend wird das passende Schema für diesen Typ extrahiert.
import openai
from pydantic import BaseModel
from typing import Optional
client = openai.OpenAI()
class DocumentType(BaseModel):
doc_type: str # invoice / contract / resume / report
confidence: float
def classify_document(text: str) -> str:
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Classify the document type.'},
{'role': 'user', 'content': text[:500]} # Use only the beginning for classification
],
response_format=DocumentType
)
return result.choices[0].message.parsed.doc_type
# Then route to the appropriate extraction schema
EXTRACTION_SCHEMAS = {
'invoice': 'InvoiceSchema', # Replace with actual Pydantic classes
'contract': 'ContractSchema',
'resume': 'ResumeSchema',
}
print('Multi-pass: classify first, then extract with the right schema')Anreicherung nach der Extraktion
Extrahierte Daten müssen nach der initialen Extraktion häufig angereichert werden: etwa indem extrahierte Unternehmensnamen durch Abfragen einer Unternehmensdatenbank in kanonische Formen überführt, extrahierte Postleitzahlen nachgeschlagen werden, um Stadt und Bundesland zu ergänzen, oder extrahierte Datumsangaben in ein Standardformat umgewandelt werden. Dieser Anreicherungsschritt sollte nach der Extraktion in Ihrem Anwendungscode erfolgen, nicht während des LLM-Aufrufs.
Wenn Sie Extraktion und Anreicherung getrennt halten, lässt sich die Pipeline leichter testen und warten. Sie können die Logik der Anreicherung unabhängig per Unit-Test prüfen und das Extraktionsmodell austauschen, ohne Ihren Anreicherungscode zu ändern.
Extraktionsgenauigkeit messen
Bei Produktions-Extraktionspipelines sollten Sie die Genauigkeit systematisch anhand eines gelabelten Testsatzes messen. Wichtige Kennzahlen sind:
- Feldgenauigkeit: Prozentsatz der pro Dokument korrekt extrahierten Felder
- Exakte Übereinstimmung: Der Feldwert stimmt exakt mit dem Referenzwert überein
- Normalisierte Übereinstimmung: Der Feldwert stimmt nach der Normalisierung überein (z. B. '$1,234.00' == '1234.0')
- Falsch-Positiv-Rate: Wie häufig das Modell ein Feld extrahiert, das null sein sollte
- Falsch-Negativ-Rate: Wie häufig das Modell für ein vorhandenes Feld null zurückgibt
Führen Sie diese Auswertung immer durch, wenn Sie Modelle ändern, Prompts aktualisieren oder neue Dokumentquellen zu Ihrer Pipeline hinzufügen. Selbst geringe Genauigkeitsverluste können bei der Verarbeitung Tausender Dokumente erhebliche geschäftliche Auswirkungen haben.
Extraktionsprotokollierung zur kontinuierlichen Verbesserung
Jedes Extraktionsergebnis in der Produktion ist ein Datenpunkt, der Ihre Pipeline verbessern kann. Protokollieren Sie jedes Eingabedokument, jede extrahierte Ausgabe und alle Validierungsfehler in einer Datenbank. Ziehen Sie regelmäßig Stichproben aus den Produktionsprotokollen, um häufige Fehlermuster zu erkennen: bestimmte Dokumentformate, mit denen das Modell Schwierigkeiten hat, Felder, die häufig null sind, obwohl sie es nicht sein sollten, oder ungewöhnliche Werte, die auf eine Prompt-Abweichung hindeuten.
Diese protokollierten Daten werden außerdem zu Ihrem künftigen Trainingsdatensatz, falls Sie ein Modell speziell für Ihre Extraktionsaufgabe feinabstimmen möchten. Dadurch erhalten Sie eine genauere und kostengünstigere Alternative zu universell einsetzbaren LLMs für strukturierte Extraktion.
Schnelltest
Testen Sie Ihr Verständnis der AI-Engineering-Konzepte aus dieser Lektion.
Lektionsrückblick
In dieser Lektion haben Sie gelernt: LLMs mit Pydantic-Schemas extrahieren zuverlässig strukturierte Daten aus beliebigen unstrukturierten Textquellen, asynchrone Verarbeitung mit Semaphoren ermöglicht die Extraktion aus Tausenden von Dokumenten im Batch unter Einhaltung der Rate Limits und die Multi-Pass-Extraktion klassifiziert Dokumente zunächst und wendet anschließend für jeden Typ das passende Schema an. Als Nächstes erstellen wir eine Validierungs- und Auto-Retry-Logik für Fälle, in denen extrahierte Daten Geschäftsregeln nicht erfüllen.
Häufig gestellte Fragen
Ist die Lektion „Daten aus unstrukturiertem Text extrahieren“ kostenlos?
Ja — der vollständige Text von „Daten aus unstrukturiertem Text extrahieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Daten aus unstrukturiertem Text extrahieren“?
Sie erstellen eine Pipeline zur Informationsextraktion, die Rohtext wie E-Mails, Belege und Artikel einliest und strukturierte Felder mit Typen, Standardwerten und Validierung zurückgibt. Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Engineering Academy zu starten?
Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Daten aus unstrukturiertem Text extrahieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?
Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- JSON-Modus und response_format
- Strukturierte Ausgaben mit Pydantic
- Daten aus unstrukturiertem Text extrahieren
- Fehlerhafte Ausgaben validieren und erneut versuchen