Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Match search word accuracy possibly using the Levenshtein distance

i have a mySQL table where people add their names and their interests. I want to use some sort of word match that goes through and finds either a 100% match or a close match. Ive heard of the levenshtein distance but have no clue how to make it cycle through my table.

    $input = $_POST["interest"];
    $result = mysql_query("SELECT interest_desc FROM interests");

Done some googling and got to this point

   function closest($seed, $haystack){
   $shortest = -1;
     foreach ($haystack as $word){
      $lev = levenshtein($seed, $word);
       if ($lev == 0) {
           $closest = $word; $shortest = 0; break;
       }
       if ($lev <= $shortest || $shortest < 0) {
       $closest  = $word; $shortest = $lev;
       }
}
return $closest;
}
$array = mysql_fetch_row($result);
$closestmatch = closest($input,$array);
echo $closetmatch;
like image 554
user1064660 Avatar asked Dec 06 '11 01:12

user1064660


1 Answers

I think SOUNDEX is an alternative for you.

The Lo Sauer's article can help you with that

http://www.lsauer.com/2013/05/mysql-fuzzy-searching-fulltext-queries.html

like image 124
Mestre San Avatar answered Sep 19 '22 15:09

Mestre San