Php 可能使用Levenshtein距离匹配搜索词精度

Php 可能使用Levenshtein距离匹配搜索词精度,php,mysql,word,matching,levenshtein-distance,Php,Mysql,Word,Matching,Levenshtein Distance,我有一个mySQL表,人们可以在其中添加他们的姓名和兴趣。我想使用某种单词匹配,通过它可以找到100%匹配或相近匹配。我听说过levenshtein距离,但不知道如何让它在我的桌子上循环 $input = $_POST["interest"]; $result = mysql_query("SELECT interest_desc FROM interests"); 做了一些谷歌搜索,并达到了这一点 function closest($seed, $haystack){

我有一个mySQL表,人们可以在其中添加他们的姓名和兴趣。我想使用某种单词匹配,通过它可以找到100%匹配或相近匹配。我听说过levenshtein距离,但不知道如何让它在我的桌子上循环

    $input = $_POST["interest"];
    $result = mysql_query("SELECT interest_desc FROM interests");
做了一些谷歌搜索,并达到了这一点

   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;

我认为SOUNDEX是你的另一个选择

“s”可以帮你解决这个问题


我认为使用PHP来实现这一点是不正确的,MySQL可以轻松有效地实现这一点。我不确定您的整个模式结构是什么样的,但您可以在MySQL中使用搜索参数创建一个过程,然后从PHP调用它

在MySQL中制作类似的内容:

-使用搜索参数创建进程 在p_SearchParam VARCHAR30中创建程序sp_searchinterest; 分隔符//

从兴趣中选择兴趣描述 其中interest_desc=p_SearchParam 或利息描述,如“%pSearchParam%”//

结束; 定界符

在PHP中,只需调用sp_searchinterest'whateveryouwant'即可返回所需的结果


您确定一定要在PHP中执行此操作吗?如果要搜索匹配项或关闭匹配项,这是在DB端正确处理的。请让我们知道。正如@rdlowery所说,你最好把责任交给MySQL——阅读并找到一个解决方案……轻松高效?通常,它反对使用存储过程。因为他们是。。在MySQL中很糟糕。另外,在90%的情况下,如果打算使用存储的代码,那么是时候考虑是否应该将代码移动到应用程序中。最后,上面的代码与Levenshtein距离Fair point Re:Levenshtein距离无关。虽然上面的程序会运行得非常快,如果他只是想这么做的话,我认为Levenshtein可能有点过头了。这应该是可以接受的答案,因为它会表现得更好,因为MySQL已经缩小了数据范围,并且可能会非常好地索引数据。您还可以将SOUNDEX值存储在单独的列中