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.
No responses yet