AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Strings nach Häufigkeit bewerten

Ein Thema von hanspeter · begonnen am 21. Jan 2008 · letzter Beitrag vom 22. Jan 2008
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 13:16
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 13:44
Hallo Peter,

zum Thema "Ähnlichkeit von Zeichenketten" hatte ich vor einiger Zeit einen Beitrag mit einem Link geschrieben: klick

Vielleicht kommst du beim Lesen auf ein paar Ideen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#3

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 13:47
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
> http://www.selfphp.info/praxisbuch/p...e=177&group=31
[/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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 14:14
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#5

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 14:26
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 14:45
Zitat von himitsu:
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.
Doch die Datenbank wird 4 Wochen vor einer Veranstaltung erstellt und nach der Veranstaltung aus statistischen Gründen archiviert.
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#7

Re: Strings nach Häufigkeit bewerten

  Alt 21. Jan 2008, 15:27
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Strings nach Häufigkeit bewerten

  Alt 22. Jan 2008, 08:01
Zitat von himitsu:
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.
Danke erst mal für den Vorschlag.
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz