Named Entity Recognition (NER) in Access einbauen: Personen, Orte, Marken erkennen

Warum ĂŒberhaupt NER?

Du willst wissen, wer, was und wo im Text erwÀhnt wird.
Kunden, Firmen, Orte – automatisch erkennen.
Access selbst kann das nicht. Aber per API oder Python im Hintergrund funktioniert’s.

Ich zeig Dir, wie Du aus Access Texte an eine NER-Engine schickst und sauber zurĂŒckloggst.

Varianten fĂŒr die NER-Analyse

OptionTechnologieAufwand
Azure Text AnalyticsREST APImittel
spaCy + FlaskPython lokalhoch
Hugging Face APIRESTmittel
OpenAI / GPTpromptbasierteinfach

FĂŒr diesen Beitrag nehmen wir Azure und spaCy.

Tabellenstruktur (Beispiel)

TabelleZweck
tblTexteEingabetexte
tblEntitiesErgebnisse: Typ, Wert, Position

Azure NER per REST aus Access ansprechen

Schritt 1: Azure Ressource anlegen

  • Azure „Cognitive Services“ erstellen
  • Region, Key und Endpoint merken
  • Sprache: z. B. de fĂŒr Deutsch

Schritt 2: VBA-Funktion

Function RufeAzureNER(text As String) As String
    Dim http As Object
    Dim apiKey As String
    Dim endpoint As String
    Dim jsonRequest As String

    apiKey = "DEIN_API_KEY"
    endpoint = "https://DEINE_REGION.api.cognitive.microsoft.com/text/analytics/v3.1/entities/recognition/general"

    jsonRequest = "{""documents"":[{""id"":""1"",""language"":""de"",""text"":""" & Replace(text, """", "\""") & """}]}"

    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    http.Open "POST", endpoint, False
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Ocp-Apim-Subscription-Key", apiKey
    http.send jsonRequest

    RufeAzureNER = http.responseText
End Function

Ergebnis extrahieren

Function ExtrahiereAzureEntities(json As String) As String
    Dim sc As Object
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"

    sc.AddCode "function parse(j){" & _
        "var r='';" & _
        "var ents=JSON.parse(j).documents[0].entities;" & _
        "for(var i=0;i<ents.length;i++){" & _
        "r += ents[i].text + '|' + ents[i].category + '|' + ents[i].offset + '\n';}" & _
        "return r;}"

    ExtrahiereAzureEntities = sc.Run("parse", json)
End Function

Speicherung in Access

Sub SpeichereEntities(textID As Long, json As String)
    Dim daten As String
    Dim zeilen() As String
    Dim teile() As String
    Dim i As Long

    daten = ExtrahiereAzureEntities(json)
    zeilen = Split(daten, vbLf)

    For i = 0 To UBound(zeilen)
        If Trim(zeilen(i)) <> "" Then
            teile = Split(zeilen(i), "|")
            If UBound(teile) = 2 Then
                CurrentDb.Execute "INSERT INTO tblEntities (TextID, Entitaet, Kategorie, Position) VALUES (" & _
                    textID & ", '" & Replace(teile(0), "'", "''") & "', '" & teile(1) & "', " & teile(2) & ")"
            End If
        End If
    Next i
End Sub

Alternative: spaCy mit Flask (lokal)

Python-Server starten:

from flask import Flask, request, jsonify
import spacy

app = Flask(__name__)
nlp = spacy.load("de_core_news_md")

@app.route("/ner", methods=["POST"])
def ner():
    text = request.json["text"]
    doc = nlp(text)
    ents = [{"text": ent.text, "label": ent.label_, "start": ent.start_char} for ent in doc.ents]
    return jsonify(ents)

app.run(port=5001)

Access-Aufruf per VBA:

Function RufeSpaCyNER(text As String) As String
    Dim http As Object
    Dim jsonRequest As String

    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    http.Open "POST", "http://localhost:5001/ner", False
    http.setRequestHeader "Content-Type", "application/json"
    jsonRequest = "{""text"":""" & Replace(text, """", "\""") & """}"
    http.Send jsonRequest

    RufeSpaCyNER = http.responseText
End Function

Beispiel: Verarbeitung im Formular

Private Sub btnAnalysieren_Click()
    Dim textID As Long
    Dim text As String
    Dim json As String

    textID = Me.txtID
    text = Me.txtEingabetext

    json = RufeAzureNER(text)
    SpeichereEntities textID, json

    MsgBox "NER abgeschlossen."
End Sub

Was erkennt NER?

KategorieBeispiele
Person„Angela Merkel“, „Herr MĂŒller“
Location„Berlin“, „Elbe“, „Europa“
Organization„Siemens“, „EU-Kommission“
Date/Time„1. Mai“, „2025“, „gestern“
Product„iPhone“, „VW Golf“

Was Du beachten musst

  • JSON kann je nach Anbieter leicht anders strukturiert sein
  • spaCy lĂ€uft nur lokal – kein Hosting ohne Aufwand
  • Azure ist schnell, aber hat Preislimits
  • NER ist nie 100 % korrekt – menschliche PrĂŒfung sinnvoll

„Du willst wissen, wer im Text auftaucht? Frag Deine Datenbank.“

Wenn Du sowas brauchst: Ich helf Dir beim Einbau.
Du sprichst Access – ich ĂŒbersetz das fĂŒr die KI.

Keine Antworten

Schreibe einen Kommentar

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