TICKTOO Systems | Schöne Dinge. Für das Internet und darüber hinaus.

Levenshtein für MySQL

Sebastian Kraus — 06.03.2012

Der Levenshtein-Algorithmus ermittelt die Distanz zwischen zwei Strings. In den meisten Programmiersprachen gehört diese Funktion zur Grundausstattung. In MySQL, wo man sie hervorragend zur Dublettenprüfung einsetzen könnte, fehlt sie. Sie lässt sich aber nachrüsten.

Der Levenshtein-Algorithmus ist bei Dublettensuche oder bei der Erkennung ähnlicher Texte extrem hilfreich. So lassen sich einfache Tippfehler, z. B. ein falsch geschriebener Nachname oder ein Zahlendreher in einer Kontonummer, mit hoher Wahrscheinlichtkeit erkennen. Zwar lässt sich diese Prüfung auch im Quellcode der Anwendung durchführen, es gibt aber Szenarien, in denen es Vorteilhaft wäre, diese Prüfung bereits in der SQL-Anweisung durchzuführen.

Folgende Schritte sind auf einem Ubuntu (10.04)-Server notwendig, um diese Funktion als Shared-Objekt zu kompilieren und in MySQL einzubinden:

# wget http://joshdrew.com/mysql_levenshtein_udf-1.0.tar.gz
# tar -xzf mysql_levenshtein_udf-1.0.tar.gz
# gcc -I/usr/include/mysql -fPIC -O -pipe -o mysqllevenshtein.so -shared -L/usr/lib/mysql -lmysqlclient mysqllevenshtein.cc

Heraus fällt eine mysqllevensthein.so. Diese kopiert man in das Lib-Verzeichnis des MySQL-Servers.

# cp mysqllevensthein.so /usr/lib/mysql/plugins/

Anschließend führt man auf dem SQL-Server mit einem Benutzer, der das CREATE FUNCTION Privileg hat, folgenden Befehl aus:

> CREATE FUNCTION levenshtein RETURNS INT SONAME 'mysqllevenshtein.so';

 

Anschließend kann die Funktion "levenshtein()" in SQL-Anweisungen verwendet werden:

mysql> SELECT levenshtein("Müller", "Mueller");
2

mysql> SELECT levenshtein("Müller", "Cabrese");
7

mysql> SELECT levenshtein("Müller", "Müller");
0

 

Sharing is Caring Facebook | Twitter | Google | LinkedIn