Discussion:
Unscharfe Suche
(zu alt für eine Antwort)
Marc F. Neininger
2005-06-07 10:40:38 UTC
Permalink
Hi,

ich suche nach einer Möglichkeit, in MySQL unscharf über Spalten zu
suchen. Wenn z.B. ein Herr Schmidt eingetragen werden soll, sollte davor
geprüft werden, ob dieser nicht schon als Herr Schmid oder Schmitt oder
so ähnlich eingetragen wurde.

DBMS ist hier eine 4.17 und ja, RTFM habe ich auch schon aber nix
passendes gefunden.

LIKE kenne ich zwar, aber wie grenzt man diesen Mustervergleich mit LIKE
sinnvoll ein? Suche ich nur über die ersten 3 Buchstaben, werden es zu
viele Hits, suche ich über die ersten 5 Buchstaben, wird's zu wenig,
suche ich über die ersten 4, ist es hier optimal, bei der Frage ob
Müller oder Mueller bin ich aber auch schon wieder raus...

Wie löst Ihr eine unscharfe Suche?

Marc
P.S.: Ich bastle an einem (inzwischen sehr üblichen) HTML-Frontend
mittels Perl.
Weinzierl Stefan
2005-06-07 11:03:24 UTC
Permalink
Post by Marc F. Neininger
Hi,
ich suche nach einer Möglichkeit, in MySQL unscharf über Spalten zu
suchen. Wenn z.B. ein Herr Schmidt eingetragen werden soll, sollte davor
geprüft werden, ob dieser nicht schon als Herr Schmid oder Schmitt oder
so ähnlich eingetragen wurde.
DBMS ist hier eine 4.17 und ja, RTFM habe ich auch schon aber nix
passendes gefunden.
LIKE kenne ich zwar, aber wie grenzt man diesen Mustervergleich mit LIKE
sinnvoll ein? Suche ich nur über die ersten 3 Buchstaben, werden es zu
viele Hits, suche ich über die ersten 5 Buchstaben, wird's zu wenig,
suche ich über die ersten 4, ist es hier optimal, bei der Frage ob
Müller oder Mueller bin ich aber auch schon wieder raus...
Wie löst Ihr eine unscharfe Suche?
SOUNDEX bzw. SOUNDS LIKE

Stefan
stefan hoffmann
2005-06-07 11:19:42 UTC
Permalink
tach Marc,
Post by Marc F. Neininger
ich suche nach einer Möglichkeit, in MySQL unscharf über Spalten zu
suchen. Wenn z.B. ein Herr Schmidt eingetragen werden soll, sollte davor
geprüft werden, ob dieser nicht schon als Herr Schmid oder Schmitt oder
so ähnlich eingetragen wurde.
Bisher mit SoundEx. Aber sehr interessant ist auch die
Levensteindistanz. Es gibt diverse Stellen im Web dazu.


mfG
--> stefan <--
Hartmut Holzgraefe
2005-06-08 20:40:22 UTC
Permalink
Post by stefan hoffmann
Bisher mit SoundEx. Aber sehr interessant ist auch die
Levensteindistanz. Es gibt diverse Stellen im Web dazu.
Innerhalb von MySQL existiert keine Levenshtein Funktion,
die müsste man als UDF selbst implementieren.
--
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
stefan hoffmann
2005-06-09 09:17:37 UTC
Permalink
tach Hartmut,
Post by Hartmut Holzgraefe
Post by stefan hoffmann
Bisher mit SoundEx. Aber sehr interessant ist auch die
Levensteindistanz. Es gibt diverse Stellen im Web dazu.
Innerhalb von MySQL existiert keine Levenshtein Funktion,
die müsste man als UDF selbst implementieren.
Da SoundEx sprachspezifisch ist, sowie in verschieden Versionen
definiert ist, muß diese auch als UDF implementiert werden.

Was ist dein Einwand?



mfG
--> stefan <--

Matthias Kövér
2005-06-07 12:05:32 UTC
Permalink
Am Tue, 07 Jun 2005 12:40:38 +0200 schrieb Marc F. Neininger:

Hallo,
Post by Marc F. Neininger
LIKE kenne ich zwar, aber wie grenzt man diesen Mustervergleich mit LIKE
sinnvoll ein? Suche ich nur über die ersten 3 Buchstaben, werden es zu
viele Hits, suche ich über die ersten 5 Buchstaben, wird's zu wenig,
suche ich über die ersten 4, ist es hier optimal, bei der Frage ob
Müller oder Mueller bin ich aber auch schon wieder raus...
vielleicht hilft dir ja soundex. Ich habe zwar selber keine Erfahrungen
damit, klingt aber hilfreich.
http://dev.mysql.com/doc/mysql/de/string-functions.html

hth
Matthias
--
ALDI-Archiv: wann gibt es wieder ... bei ALDI?
ALDI-Drehrichtung: ein dafa-"Forschungsprojekt"
Discountervergleich, ALDI-Preisliste, Linksammlung, Newsletter,...
http://www.koever.com/aldi/
Steffen Boehme
2005-06-07 12:08:17 UTC
Permalink
Also ich kann dir als Tip nur geben, entweder selbst mittels regular
expressions patterns aufzubauen und diese dann mit

Surname REGEXP 'Schmie?(d|t)t?'
sollte Schmied, Schmid, Schmiedt, Schmidt, Schmiet, Schmiett, Schmit und
Schmitt
oder
Surname REGEXP 'M(ü|ue)ller'
sollte Müller oder Mueller finden ...

(siehe: http://dev.mysql.com/doc/mysql/en/regexp.html)

Besser bedient bist du aber vielleicht mit den Funktionen

SOUNDEX() bzw. SOUNDS LIKE dran ...

Damit "klingt" Mueller wie Müller und Schmitt wie Schmied ...
Musste mal testen, ob dir das ausreicht ...
Post by Marc F. Neininger
DBMS ist hier eine 4.17 und ja, RTFM habe ich auch schon aber nix
passendes gefunden.
Steht in der MySQL-Doku, aber nichts für ungut ... ;-)


Gruß
Steffen
Post by Marc F. Neininger
Hi,
ich suche nach einer Möglichkeit, in MySQL unscharf über Spalten zu
suchen. Wenn z.B. ein Herr Schmidt eingetragen werden soll, sollte davor
geprüft werden, ob dieser nicht schon als Herr Schmid oder Schmitt oder
so ähnlich eingetragen wurde.
DBMS ist hier eine 4.17 und ja, RTFM habe ich auch schon aber nix
passendes gefunden.
LIKE kenne ich zwar, aber wie grenzt man diesen Mustervergleich mit LIKE
sinnvoll ein? Suche ich nur über die ersten 3 Buchstaben, werden es zu
viele Hits, suche ich über die ersten 5 Buchstaben, wird's zu wenig,
suche ich über die ersten 4, ist es hier optimal, bei der Frage ob
Müller oder Mueller bin ich aber auch schon wieder raus...
Wie löst Ihr eine unscharfe Suche?
Marc
P.S.: Ich bastle an einem (inzwischen sehr üblichen) HTML-Frontend
mittels Perl.
Armin Braun
2005-06-07 23:08:21 UTC
Permalink
Post by Marc F. Neininger
Wie löst Ihr eine unscharfe Suche?
Mir fällt noch der Ratcliff/Obershelp Algorithmus ein (Google ist dein
Freund). Allerdings wirds den wohl nicht als MySQL-Funktion geben.
Als Stored Procedure kommt es ja erst ab 5.0 in Frage, was also für dich
nach deiner Beschreibung entfällt :-(
Dieser Algorithmus liefert dir ein Ähnlichkeitsmass für zwei
Zeichenketten. Ab welchem Schwellwert du dann eine Identität festlegst,
ist natürlich dir überlassen. Üblich sind Werte ab 95%.

Gruss,
Armin
Loading...