Php 使用levenshtein搜索多个单词
levenshtein search是否可以根据数组检查搜索查询中的所有单词 代码如下:Php 使用levenshtein搜索多个单词,php,search,replace,levenshtein-distance,Php,Search,Replace,Levenshtein Distance,levenshtein search是否可以根据数组检查搜索查询中的所有单词 代码如下: $input = $query; // array of words to check against $words = $somearray; // no shortest distance found, yet $shortest = -1; // loop through words to find the closest for
$input = $query;
// array of words to check against
$words = $somearray;
// no shortest distance found, yet
$shortest = -1;
// loop through words to find the closest
foreach ($words as $word) {
// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $word);
// check for an exact match
if ($lev == 0) {
// closest word is this one (exact match)
$closest = $word;
$shortest = 0;
// break out of the loop; we've found an exact match
break;
}
// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}
if ($shortest == 0) {
echo "Exact match found: $closest\n";
} else {
echo "Did you mean: $closest?\n";
}
$input=$query;
//要检查的单词数组
$words=$somearray;
//还没有找到最短的距离
$shortest=-1;
//通过单词循环找到最接近的单词
foreach($words作为$word){
//计算输入字之间的距离,
//那么现在这个词呢
$lev=levenshtein($input,$word);
//检查是否完全匹配
如果($lev==0){
//最接近的单词是这个(完全匹配)
$closest=$word;
$shortest=0;
//打破循环;我们找到了一个完全匹配的
打破
}
//如果此距离小于找到的下一个最短距离
//距离,或者如果尚未找到下一个最短单词
如果($levOK,根据我现在对你的问题的理解,首先你需要将句子分成几个单词,例如:
之后,您可以通过循环第一个数组和第二个数组将每个单词与词典进行比较,例如:
foreach ($words as $word)
{
$min_distance = strlen($word); // use mb_strlen() for non-Latin
foreach ($dictionary as $new_word)
{
$dist = levenshtein($word, $new_word);
if (($dist < $min_distance) and ($dist > -1))
{
$min_distance = $dist;
$suggestion = $new_word;
}
}
}
foreach($words作为$word)
{
$min_distance=strlen($word);//将mb_strlen()用于非拉丁语
foreach($字典作为$new\u单词)
{
$dist=levenshtein($word,$new_-word);
如果($dist<$minu distance)和($dist>-1))
{
$min_距离=$dist;
$suggestion=$new_单词;
}
}
}
然后,如果距离大于0,建议使用$suggestion
注意这实际上是非常低效的!假设levinstein()
在O(1)运行,它以Θ(n*m)运行,因为你需要在整个词典中循环查找每一个单词。你可能想从概念的角度了解这些东西在现实生活中是如何设计的,或者至少为较长的单词提供建议,并循环查找词典中更相关的部分。你能给出$input的示例值吗是现在吗?$input的例子=‘快速棕色狐狸跳过懒狗’是一个句子,因此根据上面的代码,只使用第一个单词或可能整个句子来查找最接近的匹配项,但我要求这些单词中的每个都在句子中进行更正。你想用它实现什么?纠正语法错误或错误d是否漏掉单词?这用于在搜索时更正错误的单词,如“你的意思是-someword吗”代码会起作用,但正如一个句子是错误的一样,是否可以在同一句子中显示更正的单词,如错误的句子“Hello evryone”,它应该显示“Hello evryone”,在上面的问题中,它指的是它的书写位置——“你的意思是:$最近吗?\n”;那么,这个循环是如何实现的呢?你要做的是可能的,只需在内部foreach循环之后创建一个新的句子变量,并将其与单词或建议连接起来。如果你能给我一个想法就好了,因为我不太擅长循环。