Namen in einem chaotischen Text erkennen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ThePinguin
User
Beiträge: 1
Registriert: Sonntag 23. August 2020, 01:50

Hallo,

Ich habe erst vor einer Woche mit Python angefangen da ich folgendes Problem habe. Ich habe einen chaotischen Text (also einen Text, der wild Satzzeichen, Leerzeichen, Datum, Email, Namen, Kundennummern, Personalnummern usw. enthält. Dazwischen befindet sich ganz normaler Text. Nun möchte ich dieses Dokument annonymisieren. Ich habe also die Idee mit recognision entitiy erst einmal alle regulären Expressions wie Datum, Email (also allem was ein klares Format hat) raus zu filter und zu ersetzten. Nun bleibt theoretisch das Problem mit den Namen. Ich habe gehört, dass Spacy diese erkennen soll.. da es sich aber um einen chaotischen Text handelt, findet Spacy die Namen nur sehr schlecht bzw labelt fast alle Worte falsch... ich denke, dass es vielleicht funktioniert, wenn ich erst alles bekannte eben wie Datum,Email rausfilter und ersetzte und dann alle unnötigen Satzzeichen wie << oder ... lösche. Dann würde ich gerne eine neue Liste erstellen. In dieser Liste soll er nun alle Worte die er kennt abspeichern und alle anderen Worte, die er nicht kennt, in eine andere Liste. Dann würde ich gerne die unbekannte Liste nach Namen (von Hand )kontrollieren und löschen. Danach soll er die verbleibenden Worte wieder mit der anderen Liste zum Ursprungs Dokument zusammenfügen. Nun zu meiner Frage. Ist mein Vorhaben Theoretisch möglich oder habt ihr eine bessere Idee. Wie gesagt, ich bin kein Informatiker und ich würde ungern anfangen viel auszuprobieren und zu verzweifeln um dann zu erfahren das mein Vorhaben ohnehin eine ganz dumme Idee war. Danke schon mal im Vorraus
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

"Named-Entity Recognition" (NRE) ist die Erkennung von Eigennamen in Texten. Dafür gibt es verschiedene Verfahren. Sie haben jedoch alle gemein, dass sie auf Beispiel-/Trainingsdaten basieren, die deiner Beschreibung nach sicher stark von der Eingabe abweichen. Der NRE Komponente von spacy liegt soweit ich weiß ein statistisches Modell zugrunde. Die saubere Lösung für dein Anliegen wäre daher meiner Ansicht nach, mit einer größeren Anzahl von vorgelabelten Texten, die deiner Eingabe ähneln, dieses Modell zu trainieren. Dann kannst/solltet du die Texte dann auch lassen, wie sie sind

Die ganzen anderen Vorgehensweisen zur Bereinigung/Vorverarbeitung, die du beschreibst, sind zwar vom Gedankengang an sich nicht direkt verkehrt, aber werden nach meiner Einschätzung so "unkoordiniert" nichts bringen, bzw. evtl. sogar kontraproduktiv sein. Häufig macht man es so, dass der eigentlichen Named Entity Recognition verschiedene Schritte vorgelagert sind, die den Eingabetext z.B. in Tokens gliedern, Wortarten labeln, ggf. grammatische Analysen durchführen usw. D.h. so einiges, was du beschreibst, wird entweder von einer entsprechenden Komponente eh "korrekt" gemacht, wird umgekehrt vielleicht sogar benötigt und sollte erhalten bleiben, damit das Verfahren richtig funktioniert, oder ist irrelevant.

In der Praxis kann es auch sein, dass es auch die Möglichkeit eines Mittelwegs gibt. Dafür müsste man aber die Eingabedaten vollständig sehen und analysieren können. Das ist viel Aufwand.
Antworten