![]() |
Strings nach Häufigkeit bewerten
Hallo,
ich möchte ein kleines Problem lösen und habe noch keinen richtigen Plan, wie ich das angehen kann. Vielleicht hat wer einen Denkanstoss, wie man die Lösung angehen könnte. Hier das Problem. In einer Datenbank werden für eine Veranstaltung jedem Teilnehmer ein Sportverein zugeordnet. Da die Daten aus unterschiedlichen Quellen stammen, liegt oftmal eine unterschiedliche Schreibweise des gleichen Vereins vor. Das wird bisher manuell korrigiert. Ich möchte das ganze zumindest programmtechnisch unterstützen, das evenduell zusammengehörende Schreibweisen sortiert angezeigt werden. Beispiel: Korrekte Schreibweise Sportclub im ASV Landau e.V. Weitere mögliche Schreibweisen: SC Landau S.Club Landau Sportclub Landau SV Landau SC im ASV Landau Das ganze noch wahlfrei mit oder ohne den Zusatz "e.V." Also der Ort wiederholt sich n mal. Aus etwa 200 bis 300 Einträgen möchte ich eine Sortierung ähnlich dieser Liste anzeigen. Der Anwender soll dann zusammengehörende Bezeichner auswählen und auf einen einheitlichen Stand ändern. Hat wer eine Idee wie man das Problem angehen könnte? Gruß Peter |
Re: Strings nach Häufigkeit bewerten
Hallo Peter,
zum Thema "Ähnlichkeit von Zeichenketten" hatte ich vor einiger Zeit einen Beitrag mit einem Link geschrieben: ![]() Vielleicht kommst du beim Lesen auf ein paar Ideen. Freundliche Grüße |
Re: Strings nach Häufigkeit bewerten
Du könntest erstmal alles rausfiltern, was nicht benötigt wird (im, SC, S.Club, Sportclub usw.) und wenn dann möglichst nur noch der Stadtname vorhanden ist, dann diesen in den restlichen Einträgen suchen.
Wird aber bei größeren Städten bestimmt wieder Probleme geben (hier in DD haben wir ja auch nicht nur einen SC). es gibt auch irgendwo eine Funktion (vergess ständig wie die heißt), welche einen String prozentual vergleicht (also wieviel übereinstimmt) [add] in PHP gibt's Fu nktionen wie SoundEx Levenshtein > ![]() [/add] [add2] ich würd mal denken, das bei dir keine/kaum Schreibfehler vorkommen, aber die Wörte wohl auch mal in einer etwas anderen Reihnfolge vorkommen können. Also wäre es vermutlich besser den String in seine Einzelwörter zu zerlegen (bestimmte Schlüsselwörter wie "im", "Sportclub", "SC" usw. zu entfernen, mit sowas wie Levenshtein zu vergleichen und die Ergebnisse zusammenzurechnen) [/add2] womöglich könnte man das dann mit 'ner erweiterbaren List optimieren. also wo alle bisher bekannten Möglichkeiten für jeden Sportclub drinsteht. > erst schaut das Programm in die Liste ob es den Namen schon kennt > wenn er ihn schon kennt, dann trägt er den "bevorzugten" Namen ein > und wenn nicht, dann wird halt der Benutzer gefragt, ob er den Namen aus der Liste (bevorzugte Namen) auswählt (vo das Programm wieder wie oben eine Vorauswahl anzeigt) > und wenn da nichts vorhanden ist, dann alle Sportclubs anzeigen und eventuell einen neuen Namen eintragen |
Re: Strings nach Häufigkeit bewerten
Mit der Filtermethode könnte es gehen.
Ich habe eine Liste mit der korrekten Schreibweise aller Vereine. Ganz ohne manuelle Auswahl wird es wohl nicht gehen, da in der gleichen Stadt mehrere Vereine vorhanden sein können, die sich im dümmsten Fall nur durch den Zusatz unterscheiden. z.B. RC oder RV als Vorsatz sind unterschiedliche Bezeichner. Gruß Peter |
Re: Strings nach Häufigkeit bewerten
bei der Auswahl durch's Programm meinte ich auch einen direkten Vergleich ... also wenn die Schreibweise genau übereinstimmt.
würde jedenfalls viel Arbeit ersparren, da dann für eine bestimmte "falsche" Schreibweise nur noch inmal ausgewählt (durch Benutzer) werden müßte und alles was genauso benannt ist dann automatisch umbenannt würde. ich denk mal ihr bearbeitet diese Liste nicht nur einmal und da kennt das Programm bei weiteren Durchläufen schon viele Namen und der Benutzer hat immer weniger zu tun. |
Re: Strings nach Häufigkeit bewerten
Zitat:
Für die folgende Veranstaltung erfolgt eine Neuerfassung. Die Meldungen kommen per Post,email, telefonisch. Gerade bei Post oftmals unleserliche Handschriften. Ich führe allerdings ein Archiv mit, um bei zukünftigen Erfassungen Schreibarbeit zu sparen. Gruß Peter |
Re: Strings nach Häufigkeit bewerten
Also doch nicht nur einmal ;)
nja, es müßten ja nur die Vereinsnamen in den bisher aufgefundenen Schreibweisen gespeichert und beim nächsten Mal wiederverwendet werden.
Delphi-Quellcode:
var Namensliste: Array of Array of record
Name: string; Vergleich: Integer; end; NamensListe[0][0] := 'Sportclub im ASV Landau e.V.'; NamensListe[0][1] := 'SC Landau'; NamensListe[0][2] := 'S.Club Landau'; NamensListe[0][3] := 'Sportclub Landau'; NamensListe[0][4] := 'SV Landau'; NamensListe[0][5] := 'SC im ASV Landau'; NamensListe[1][0] := 'nächster SC...' // läßt sich auch anders speichern verkettete Listen und so // aber hier macht sich als bevorzugter Namen wohl die [...][0] // schauen ob der Name schon vorhanden ist for i := 0 to High(NamensListe) do for i2 := 0 to High(NamensListe[i]) do begin if NamensListe[i][i2].Name = Vereinsname then begin Vereinsname := NamensListe[i][0].Name; exit; end; // da wir schon einmal die Liste durchgehn, // können wir auch gleich hier zurücksetzen NamensListe[i][i2].Vergleich := 0; end; // Name in Einzelwörter zerlegen A := Splitt(Vereinsname, ' '); // Wörter wie "Sportclub" "SC" "im" usw. entfernen Filter(A); // Vergleichswerte zurücksetzen (* wurde oben schon gemacht for i := 0 to High(NamensListe) do for i2 := 0 to High(NamensListe[i]) do NamensListe[i][i2].Vergleich := 0;*) // Vergleichen for i := 0 to High(NamensListe) do for i2 := 0 to High(NamensListe[i]) do for i3 := 0 to High(A) do inc(NamensListe[i][i2].Vergleich, SoundEx(A[i3])); // je größer jetzt NamensListe[i][i2].Vergleich ist, umso größe wäre wohl die Ähnlichkeit // namen mit größter Warscheinlichkeit raussuchen und von denen den Index 0 anzeigen // [i][0] entspricht hier ja dem bevorzugten Namen |
Re: Strings nach Häufigkeit bewerten
Zitat:
Ich werde so einen Weg, aber gerade umgekehrt gehen. Ich werde est mal alle Sonderzeichen und Worte mit der Länge 1 streichen. Anschließend alle bekannten Zusätze wie Verein,Club u.s.w. Den Rest vergleiche ich dann über die Soundex Funktion. Mit Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz