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