DB: Datenbereinigung
Bei meiner Go-Umfrage lasse ich die angemeldeten Spieler die Leute eingeben, zu denen sie in bestimmten Beziehungen stehen. Dies passiert über die Eingabe von Vorname+Name.
Eine Dropdown-Liste gibt es bei der Eingabe nicht, weil ich wollte, dass auch nicht angemeldete Spieler angegeben werden können. Eine Dropdown-Liste hätte da einen systematischen Fehler reingebracht, weil aus Gründen der Bequemlichkeit eher Leute aus der Liste eingegeben worden wären. Möglich und für die Datenqualität von Vorteil wäre wahrscheinlich ein Vorschlags-Mechanismus gewesen (ähnlich Google Suggest). Ich wollte jedoch schnell zum Ziel kommen und habe deshalb darauf verzichtet, etwas derartiges zu implementieren (außerdem verfüge ich noch nicht über AJAX-Kenntnisse).
Doch nun zum Punkt: In die Datenbank haben sich durch diese Vorgehensweise etliche Fehler eingeschlichen. Vom schlichten Rechtschreibfehler (Andeas statt Andreas) bis zum beabsichtigten(?) Fehler (Spitzname statt Vorname) und verschiedenen Schreibweisen(?) von Umlauten (oe/ö/ö) war alles dabei. Bei ca. 800 Beziehungen (und das ist noch eine relativ kleine Anzahl) ist eine manuelle Korrektur so gut wie unmöglich (das menschliche Auge ist beispielsweise nicht so gut darin, vergessene Buchstaben zu bemerken, was ja auch so seine Vorteile hat).
Ich habe mich also für folgenden Weg der Datenbereinigung entschieden: Ich lasse mir alle Beziehungen anzeigen, bei denen die Zielperson (Vorname+Name) nicht in der Nutzertabelle vorkommt, aber einem bestimmten Nutzer in Vorname und Name jeweils zu mindestens 75% (habe auch die 60%-Liste durchgeschaut, allerdings waren da keine weiteren relevanten Treffer dabei) ähnlich ist. Hierbei vertraue ich auf den intelligenten Ähnlichkeitsalgorithmus der php-Funktion similar_text, die auch mit Zeichenauslassungsfehlern gut umgehen kann (zeichenweiser Vergleich der Wörter ist einfach nicht praktikabel, weil aus einem am Anfang des Wortes vergessenem Buchstaben eine katastrophale Ähnlichkeit resultiert). Andere Programmiersprachen bieten bestimmt ähnliche Funktionen, aber ich war einfach froh, schnell was gefunden gehabt zu haben.
Hier ein paar Beispiele:
| Wort1 | Wort2 | Anz Übereinstimmungen | % Übereinstimmung |
| Hallo | Halo | 4 | 88.8888888889 |
| Hallo | Hallo | 5 | 100 |
| Haxxo | Hallo | 3 | 60 |
| Andreas | Andeas | 6 | 92.3076923077 |
| Zötzsche | Zoetsche | 6 | 75 |
| Manuela | Manja | 4 | 66.6666666667 |
Klar hat die gewählte automatisierte Vorgehensweise den Nachteil, dass Beziehungen zu Leuten, die sich nicht angemeldet haben, nicht überprüft werden. Das habe ich aber in Kauf genommen, weil diese Leute bei der Analyse auch nicht so eine bedeutende Rolle spielen.
1 Comments:
Habe in der Arbeit vorgeschlagen, einen derartigen Ähnlichkeitsalgorithmus über die Stammdaten zu jagen (könnte mir vorstellen, dass da auch so einige Duplikate, Rechtschreibfehler und sonstige Ungereimtheiten drin sind). Allerdings wandte ein Kollege zu Recht ein, dass es sich bei den Bezeichnungen von Projekten u.ä. oftmals um Wortgruppen handele und vertauschte Wörter sich auf einen naiven Algorithmus sehr negativ auswirken dürften. Recht hat er und ich was zu denken.
Post a Comment
<< Home