Geigneter SQL Befehl für suche nach ähnlichen Wörtern
-
Hi, ich habe eine Datenbank mit verschiedenen Wörtern und möchte eine SQL abfrage starten welche mir das Wort findet. Das Problem dabei ist, dass ich das Wort was ich abfragen möchte evtl. nicht ganz korrekt eingegeben habe.
Z.B. befindet sich in der Datenbank das Wort "folgt". Ich gebe ein
SELECT * FROM Database WHERE word = 'golgt'
oder "olgt" oder "fogt". D.h. ein(oder mehrere) Buchstabe ist falsch oder fehlt. Im wesentlichen also eine art auto Korrektur auf der Basis meiner Datenbank.
Jemand einen Vorschlag wie ich das am besten mache?
-
Zum einen könntest du mal Soundex probieren, falls es deine Datenbank unterstützt.
Aber eigentlich der beste Algo dafür ist Levenshtein Distance (den müßtest du dann aber von deiner Applikation aus umsetzen).Eidt: Habe gerade rausgefunden, daß PostgreSql direkt Levensthein unterstützt: F.15. fuzzystrmatch (unter "F.15.2. Levenshtein").
-
Super, danke. Levenshtein Distance ist genau das was ich brauche, muss jetzt nur schauen wie ich das umsetze / einbinde.
-
Th69 schrieb:
Aber eigentlich der beste Algo dafür ist Levenshtein Distance (den müßtest du dann aber von deiner Applikation aus umsetzen).
Da hast dir aber den schnellsten rausgesucht
-
Funktioniert bisher super mit Levenshtein. Vergleiche ein Wort mit meiner Array von Strings, Laufzeit mäßig habe ich (noch?) keine Defizite bemerkt. Mein Wörterbuch aber ist bisher auch nicht sonderlich groß (20 Einträge) und mir würde eine Sekunde pro zu testendes Wort auch schon reichen. Wenn es merklich langsamer wird dann schau ich mich nach was neuem um ;).
-
@wollknäul
Wäre cool wenn du ne Alternative vorschlagen könntest statt nur anzudeuten dass die Levenshtein Distance recht aufwendig zu berechnen ist.
-
Bin ich der einzige der beim tippen von "Levenshtein" kurz inne hält, damit der Name auch ja richtig geschrieben wird . Diese "..sht.." ist so ungewohnt.
-
Ich tippe sowas nicht, dafür gibt es Copy+Paste
-
hustbaer schrieb:
Ich tippe sowas nicht, dafür gibt es Copy+Paste
und Suchmaschinen, die dir heutzutage auch ziemlich gute Ergebnisse bei Schreibfehlern ausgeben. War vor 15 Jahren noch anders.