Worum geht’s?

Du bekommst Dokumente.
Meist Word oder PDF.

Und Du willst wissen:
Ist das ein Arbeitsvertrag, ein NDA oder ein Angebot?
Oder einfach nur eine AGB?

Manuell lesen? Muss nicht sein.
Wir lassen GPT oder Azure Form Recognizer klassifizieren.
Direkt aus Word. Mit VBA.

Was brauchst Du?

  • Word 2024 mit Makro-UnterstĂŒtzung
  • Einen OpenAI- oder Azure AI-Zugang
  • Alternativ: Azure Form Recognizer (Custom Model oder Prebuilt)
  • Ein Dokument mit Text
  • Etwas Erfahrung mit JSON & HTTP in VBA

Beispielhafte Klassifikationen

DokumentinhaltKlassifikation
„Dieser Vertrag regelt das ArbeitsverhĂ€ltnis
“Arbeitsvertrag
„Mit Unterzeichnung dieser Geheimhaltungsvereinbarung
“NDA
„Hiermit bestĂ€tigen wir Ihnen folgendes Angebot
“Angebot
„Die allgemeinen GeschĂ€ftsbedingungen
“AGB

Prompt-Vorlage fĂŒr GPT

Analysiere den folgenden Dokumententext. Gib exakt eine der folgenden Kategorien zurĂŒck: Arbeitsvertrag, Geheimhaltungsvereinbarung, Angebot, AGB, Sonstiges.
Text: [Dokumentauszug hier einfĂŒgen]

GPT gibt dann zurĂŒck:

Klassifikation: Angebot

GPT-Klassifikation per VBA in Word

Funktion zur GPT-Anfrage

Function KlassifiziereDokumentGPT(text As String) As String
    Dim http As Object
    Dim apiKey As String
    Dim prompt As String
    Dim json As String
    Dim result As String

    apiKey = "sk-..." ' Dein OpenAI-API-Key

    prompt = "Analysiere den folgenden Dokumententext. Gib exakt eine der folgenden Kategorien zurĂŒck: Arbeitsvertrag, Geheimhaltungsvereinbarung, Angebot, AGB, Sonstiges." & vbCrLf & "Text: " & text

    json = "{""model"":""gpt-4"",""messages"":[{""role"":""user"",""content"":""" & Replace(prompt, """", "\""") & """}],""temperature"":0}"

    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", "https://api.openai.com/v1/chat/completions", False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .send json
        result = .responseText
    End With

    Dim startPos As Long, endPos As Long
    startPos = InStr(result, """content"":""") + 11
    endPos = InStr(startPos, result, """}")
    KlassifiziereDokumentGPT = Mid(result, startPos, endPos - startPos)
End Function

Dokumentinhalt auslesen und klassifizieren

Sub DokumentKlassifizieren()
    Dim inhalt As String
    Dim klasse As String

    inhalt = Left(ActiveDocument.Content.Text, 3000) ' Nur ersten Teil nehmen
    klasse = KlassifiziereDokumentGPT(inhalt)

    MsgBox "Klassifikation: " & klasse, vbInformation
End Sub

Alternative: Azure Form Recognizer

Setup

  • Azure Ressource „Form Recognizer“ erstellen
  • Prebuilt-Modell: „Document“ oder Custom Model trainieren
  • PDF oder Word in Base64 oder als URL ĂŒbergeben

Beispielhafte POST-Anfrage (VBA-Ă€hnlich)

' Achtung: hier stark vereinfacht, da Azure OCR PDF oder Base64 erwartet
' JSON-Antwort enthÀlt "documentType" oder "fields"

' Endpoint: https://<region>.api.cognitive.microsoft.com/formrecognizer/documentModels/prebuilt-document:analyze?api-version=2023-07-31

' SetRequestHeader: 
'   "Content-Type": "application/json"
'   "Ocp-Apim-Subscription-Key": "<dein-key>"

Azure erkennt dann z. B.:

"documentType": "contract"

Oder liefert einen Score je Kategorie (bei Custom Model).

Tipps aus der Praxis

  • GPT funktioniert gut bei Dokumenten mit klarer Sprache
  • Bei Tabellen, juristischen AnhĂ€ngen oder Bildern ist Azure OCR robuster
  • Bei sensiblen Dokumenten → Azure in EU-Region verwenden
  • Texte ggf. vorher mit Replace(text, vbCrLf, " ") glĂ€tten

Erweiterungsideen

  • Ergebnis in Dokument-Eigenschaften oder Fußzeile schreiben
  • Automatisches Ablegen nach Typ (Verzeichnissteuerung)
  • Kombination mit Metadaten-Extraktion (z. B. „Vertragsbeginn“)
  • DokumentenprĂŒfung: „Fehlt Unterschrift?“ → Zusatz-Prompt

Wenn Du regelmĂ€ĂŸig Dokumente einsortieren musst, ohne sie lesen zu wollen – dann lass GPT oder Azure erkennen, was auf dem Tisch liegt.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert