Implement token distance with levenshtein
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 6 Dec 2006 21:45:18 +0000 (21:45 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 6 Dec 2006 21:45:18 +0000 (21:45 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1250 839d8a87-29fc-0310-9880-83ba4fa771e5

classes/platal.php

index 42e743d..ee6fcd1 100644 (file)
@@ -93,13 +93,19 @@ class Platal
         if (in_array($key, $keys)) {
             return $key;
         }
+        $val  = null;
+        $best = null;
         foreach ($keys as $k) {
-            if (strpos($key, $k) !== false || strpos($k, $key) !== false) {
-                return $k;
+            $lev = levenshtein($key, $k);
+            if ((is_null($val) || $lev < $val) && $lev < strlen($k)/2) {
+                $val  = $lev;
+                $best = $k;
             }
         }
-        if (in_array("#final#", $keys)) {
+        if (is_null($best) && in_array("#final#", $keys)) {
             return "#final#";
+        } else {
+            return $best;
         }
         return null;
     }