Warum das praktisch ist
Weil Du manchmal wissen willst, welche Namen, Orte oder Firmen in einem Text vorkommen –
z. B. fĂŒr CRM-Importe, DatenschutzprĂŒfung oder Klassifikation.
Mit NER kannst Du genau das automatisieren.
Und Word markiert Dir direkt die Fundstellen.
Per VBA.
Mit Hugging Face oder Azure als Dienst dahinter.
Was erkannt wird
| EntitÀtstyp | Beispiele |
|---|---|
| Person | „Max Mustermann“, „Angela Merkel“ |
| Ort | „Berlin“, „LĂŒbeck“, „Ostsee“ |
| Organisation | „Microsoft“, „Handelskammer“ |
Variante A: Hugging Face NER via REST
Schritt 1: Text aus Word holen
Function HoleMarkiertenText() As String
If Selection.Type = wdNoSelection Then
MsgBox "Bitte zuerst Text markieren."
HoleMarkiertenText = ""
Exit Function
End If
HoleMarkiertenText = Selection.Text
End Function
Schritt 2: Hugging Face API aufrufen
Function HF_NER(text As String) As String
Dim http As Object
Dim json As String
Dim token As String
token = "DEIN_HF_TOKEN"
json = "{""inputs"":""" & Replace(text, """", "\""") & """}"
Set http = CreateObject("MSXML2.ServerXMLHTTP")
http.Open "POST", "https://api-inference.huggingface.co/models/dbmdz/bert-large-cased-finetuned-conll03-english", False
http.setRequestHeader "Authorization", "Bearer " & token
http.setRequestHeader "Content-Type", "application/json"
http.Send json
HF_NER = http.responseText
End Function
Schritt 3: JSON-Ergebnis auswerten
Function ExtrahiereNER(text As String) As Collection
Dim sc As Object
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
sc.AddCode "function parse(j) {" & _
"var res = []; " & _
"var data = JSON.parse(j); " & _
"for (var i=0; i<data.length; i++) {" & _
" if (data[i].Entity_group && data[i].word) res.push(data[i].entity_group + ':' + data[i].word); " & _
"} return res; }"
Dim output As Variant
Set output = sc.Run("parse", text)
Dim result As New Collection
Dim i As Long
For i = 0 To UBound(output)
result.Add output(i)
Next
Set ExtrahiereNER = result
End Function
Schritt 4: Markierung im Dokument
Sub MarkiereNER()
Dim text As String
text = HoleMarkiertenText()
If text = "" Then Exit Sub
Dim json As String
json = HF_NER(text)
Dim nerItems As Collection
Set nerItems = ExtrahiereNER(json)
Dim word As Variant
For Each word In nerItems
Dim teile() As String
teile = Split(word, ":")
Call SucheUndMarkiere(teile(1), teile(0))
Next
End Sub
Sub SucheUndMarkiere(wort As String, typ As String)
Dim rng As Range
Set rng = ActiveDocument.Content
With rng.Find
.Text = wort
.MatchCase = False
.MatchWholeWord = True
Do While .Execute
rng.HighlightColorIndex = wdYellow
rng.Font.Bold = True
rng.InsertAfter " [" & typ & "]"
rng.Collapse wdCollapseEnd
Loop
End With
End Sub
Variante B: Azure Language Services (NER-Modul)
Azure bietet eine fertige NER-API als Teil der Language Services.
Du brauchst:
- Ressource in Azure
- Endpoint + SchlĂŒssel
"https://<region>.api.cognitive.microsoft.com/text/analytics/v3.2/entities/Recognition/general"
Die Logik ist Ă€hnlich – JSON senden, Antwort parsen, Fundstellen markieren.
Was das bringt
| Szenario | Nutzen |
|---|---|
| DatenschutzprĂŒfung | Namen & Firmen erkennen |
| Vorverarbeitung fĂŒr CRM | Firmen und Orte automatisch erfassen |
| Briefanalyse | Was kommt in welchem Text wie oft vor? |
Was Du beachten musst
- Hugging Face NER ist englisch – bei deutschem Text eingeschrĂ€nkt
- Azure erkennt auch Deutsch, aber ist kostenpflichtig
- Ergebnis muss nachbearbeitet werden (z. B. Doppelmarkierung vermeiden)
- GPT kann alternativ via Prompt auch NER ĂŒbernehmen, aber unstrukturierter
Erweiterungsideen
- Treffer als Kommentar statt Markierung
- Fundstellen in Tabelle exportieren
- Heatmap: Farbe je nach HĂ€ufigkeit oder Typ
„Du liest nur noch das Wichtige. GPT und NER finden den Rest.“
Wenn Du sowas brauchst: Sag Bescheid.
Ich bau Dir NER so in Word ein, dass Du nie wieder manuell suchst.