11 November 2008

Levenshtein als UDF in MySql

...der Titel verrät es bereits. Mal wieder eine kleine Notiz ohne jegliche Gewähr und doppelten Boden. Diesmal soll die Levenshtein-Distanz als user-defined function zu MySql hinzugefügt werden. Ich verwende die Implementation von Josh Drew, die man sich hier als source runterladen kann. Unter Ubuntu benötigt man vor dem Compilieren noch ein paar MySql-Header, die man mit
apt-get install libmysqlclient-dev
bekommt. Danach wird mysqllevenshtein.cc ausgepackt und als shared object gebaut:
g++ -I /usr/include/mysql/ -o libmysqllevenshtein.so -shared mysqllevenshtein.cc
Das shared object wird nach /usr/lib/mysql kopiert
cp libmysqllevenshtein.so /usr/lib/mysql/
ein Link erzeugt und der Cache erneuert:
cd /usr/lib
ln -s mysql/libmysqllevenshtein.so .
ldconfig

Danach sollte man in MySql die neue Funktion anmelden können:
CREATE FUNCTION levenshtein RETURNS INT SONAME 'libmysqllevenshtein.so';
Noch prüfen, ob sie auch funktioniert:
mysql> select levenshtein('Fall', 'Knall');
+------------------------------+
| levenshtein('Fall', 'Knall') |
+------------------------------+
| 2 |
+------------------------------+
1 row in set (0.00 sec)

Prima. Jetzt fehlt eigentlich nur noch die Möglichkeit, den Editierabstand auch noch zu gewichten. Dazu muß man aber die Funktion umschreiben und ich habe doch keine Zeit... Sollte sich da jemand mal erfolgreich dran versucht haben, darf der oder die sich gerne bei mir melden.

Nachtrag: Natürlich geht es auch anders. Soeben das hier gefunden, was ich natürlich niemandem vorenthalten will.

Labels: , , ,

1 Comments:

At 16:09, Anonymous Anonym said...

Vielen Dank!

Hat auf einen OpenSuse11 gut funktioniert.

Und schafft pro Sekunde das wofür die reine sql-Version 6 Minuten gebraucht hat.

 

Kommentar veröffentlichen

<< Home