Ähnlichkeitssuche: Die "Kölner Phonetik" in APEX

In einer APEX-Anwendung ist die Suche in einem Bericht etwas völlig Normales; interaktive und klassische Berichte werden von APEX typischerweise direkt mit Suchfunktion bereitgestellt. Bereits in der Vergangenheit sind in der APEX-Community Tipps zu den Themen Case- und Umlaut-Insensitive Suche sowie Ähnlichkeitssuche (unscharfe Suche) erschienen.

Heute geht es um einen, für den deutschsprachigen Raum relevanten, Spezialfall der Ähnlichkeitssuche: Unser aktueller Tipp zeigt, wie man die "Kölner Phonetik" in der Datenbank implementieren und in einer APEX-Anwendung nutzen kann.

Kommentare:

Der Algorithmus liefert auf unserer Kundendatenbank 220 verschiedene Namen, wenn ich nach "Meier" suche.
Dabei treten aber auch sehr abwegige Namen auf, z.B. "Hüner", "Mohr", "Nary" u.s.w.
Da ist die phonetische Gleichheit aber arg an den Haaren herbeigezogen.
Gruß
Klaus

Gesendet von Klaus Barthels am August 05, 2013 at 02:41 PM MESZ #

Hallo Klaus,

in der Tat - die Kölner Phonetik liefert recht viele Treffer auf einen Suchstring. Schaut man sich den Algorithmus genau an, dann sieht man, dass alle Vokale zwischen zwei Konsonanten gleich behandelt werden - "Meier" ist also das gleiche wie "Mayer", aber auch "Moor" oder gar "Meeauioooor". Ziel der Kölner Phonetik ist es, Treffer zu generieren. Bei der Bewertung der Treffer könnte das Paket UTL_MATCH (ab 11.2) weiterhelfen - die man könnte die "EDIT_DISTANCE" ermitteln und danach absteigend sortieren.

Hilft dies weiter?

Beste Grüße

Carsten Czarski

Gesendet von Carsten Czarski am August 05, 2013 at 02:48 PM MESZ #

Hallo Carsten,
vielen Dank für den interessanten Hinweis.
Das könnte helfen.
Mit dem Abstand lässt sich das sicherlich besser händeln.
Da wir inzwischen auf die 11er-Version umgestiegen sind, sollte das wohl klappen.

Gruß
Klaus

Gesendet von Klaus Barthels am August 05, 2013 at 03:05 PM MESZ #

Hallo Cartsten,
ichhabe das mit dem UTL_MATCH mal ausprobiert, aber das Ergebnis ist deprimierend.
Das Skript
select distinct NAME1,
SYS.UTL_MATCH.EDIT_DISTANCE('MEIER', miratool.func_phonetik(NAME1)) Distanz
from CONSIST.KB_SA120
where miratool.func_phonetik(name1) = miratool.func_phonetik('MEIER')
order by 2 desc, 1

liefert mir als Distanz generell den Wert 5.

Anscheinend stelle ich mich zu dumm an,
denn die Abweichungen sind teilweise doch gravierend (siehe ersten Post).

Gruß
Klaus

Gesendet von Klaus Barthels am August 07, 2013 at 12:14 PM MESZ #

Hallo Klaus,

in die Funktion EDIT_DISTANCE sollte neben dem Suchbegriff ("MEIER") nicht der "phonetische" Wert hineingegeben werden, sondern der tatsächliche. Also so:

select distinct
NAME1,
SYS.UTL_MATCH.EDIT_DISTANCE('MEIER', NAME1) Distanz
from CONSIST.KB_SA120
where miratool.func_phonetik(name1) = miratool.func_phonetik('MEIER')
order by 2 desc, 1

Die "Edit Distance" gibt an, wieviele Buchstaben verändert werden müssen, um vom ersten zum zweiten String zu kommen. Da die Kölner Phonetik einen Zahlenwert zurückliefert, kommt natürlich immer die Länge des Strings heraus, wenn man den Originalwert mit dem Zahlenwert vergleicht. Man sollte stets die "Edit Distance" zwischen dem Wert in der Tabelle und dem *Suchbegriff* ermitteln.

Analog dazu käme noch die Funktion JARO_WINKLER zum Einsatz, welche die "Distanz" etwas anders berechnet - welche besser ist, müsste man herausfinden ...

Hilft dies weiter?

Beste Grüße

Carsten Czarski

Gesendet von Carsten Czarski am August 07, 2013 at 01:54 PM MESZ #

Hallo Carsten,
so etwas kommt heraus, wenn man "Äpfel mit Birnen" vergleicht.
Ich habe doch gleich vermutet, dass es "Fehler 0040" ist (Der Fehler sitzt 40 Zentimeter vor dem Bildschirm).
Nun ja, schieben wir es mal auf die Bürotemperatur (31,2° C).
Ganz herzlichen Dank für Deine schnelle Hilfe.

Beste Grüße

Klaus

Gesendet von Klaus Barthels am August 08, 2013 at 07:07 AM MESZ #

Nachtrag:
Ich habe das mal mit UTL_MATCH.JARO_WINKLER probiert.
Diese Funktion liefert eindeutig ein (für mich) viel brauchbarers Ergebnis, da dort anscheinend ein Prozentsatz wiedergegeben wird, der mit 15 Nachkommastellen sehr fein auszuwerten ist.
Damit kann ich wirklich etwas anfangen.

Ganz herzlichen Dank.

Klaus

Gesendet von Klaus Barthels am August 08, 2013 at 07:18 AM MESZ #

Senden Sie einen Kommentar:
Kommentare sind ausgeschaltet.
About


Hier finden Sie Informationen, Tipps und Tricks zu Oracle Application Express (APEX), SQL und PL/SQL.


Die Community-Arikel repräsentieren die Meinung des Autors und nicht zwingend die Meinung der Oracle Deutschland B.V. & Co KG.


Viel Spaß beim Lesen wünscht

Carsten Czarski
ORACLE Deutschland B.V. & Co. KG

Search

Categories
Archives
« April 2014
MoDiMiDoFrSaSo
 
1
2
3
4
5
6
7
8
9
10
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Heute