levenshtein() 是 PHP 中的内置函数,用于确定与两个字符串比较的距离单位,称为 Levenshtein 距离。编辑距离的定义代表要修改的字符总数,例如替换、插入或删除输入字符串以将其转换为另一个字符串。
广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
PHP 中默认对上述 3 种修改(替换、删除、插入)赋予相同的权重。但是我们可以选择通过给出上述可选参数来输入每个操作的成本或权重。该函数使用的算法复杂度为 O(a*b),其中 a 和 b 分别是字符串 str1 和 str2 的长度。
此功能有几点需要注意:
这里我们讨论语法和参数:
语法:
levenshtein(str1,str2,insert,replace,delete)
参数:
最后 3 个参数的默认值为 1。
返回值: 该函数输出两个输入字符串之间的编辑距离。如果字符串总字符数中的任何一个超过 255,它都会返回值 -1。
让我们举几个例子来了解 levenshtein 函数的工作原理。
代码:
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'rdo'; $s2 = 'rst'; print_r(levenshtein($s1, $s2)); ?>
输出:
这是一个基本示例,其中 2 个输入字符串 s1 和 s2 有一个单词,每个单词由 3 个不同的字母组成。现在,levenshtein 函数逐个字符地比较这两个字符串,并找出字符数的差异。这里有 2 个字母在 3 个字母中不常见。因此,为了使第一个字符串与第二个字符串相同,我们需要向其添加 2 个字母“s,t”,因此输出 2。
代码:
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'first string'; $s2 = 'second string'; print_r(levenshtein($s1, $s2)); ?>
输出:
在这个基本示例中,我们可以找出 s1 和 s2 表示的 2 个输入字符串之间的编辑距离。如果我们比较两个字符串的字符,我们可以看到它们有一个共同的单词,即“细绳”。而在剩下的单词中,它会在“第一个”和“第二个”单词之间进行比较,并与常用单词“字符串”进行比较。这里唯一不常见的字母是“f,e,c,o,d”和额外的“s”。因此 levenshtein 函数返回输出为 6,这意味着这 6 个字母是这 2 个输入字符串之间的差异,使用它可以使这 2 个字符串在字符方面相等。
代码:
<?php // PHP code to determine levenshtein distance // between $s1 and $s2 $s1 = 'Common Three Words'; $s2 = 'Common Words'; echo("The Levenshtein distance is: "); print_r(levenshtein($s1, $s2)); ?>
输出:
在此示例中,我们可以看到第一个字符串有 3 个单词,而第二个字符串只有 2 个单词。我们可以注意到第二个字符串中的这两个单词已经出现在第一个字符串中。因此,这里字符的唯一区别是“三”字,它有 5 个字符。这里需要注意的一个有趣的事情是,输出给出 6,这意味着即使是额外的空格也被视为一个字符。
<?php // Giving a misspelled word as input $ip = 'giraffee'; // sample set array to compare with $word_list = array('cat','dog','cow','elephant', 'giraffe','eagle','pigeon','parrot','rabbit'); // Since shortest distance is not found yet $short = -1; // Looping through array to find the closest word foreach ($word_list as $word_list) { // Calculating the levenshtein distance between // input word and the current word $levn = levenshtein($ip, $word_list); // To check for the matching word if ($levn == 0) { // This is the closest one which is an perfect match $closest = $word_list; $short = 0; // Here we break from foreach loop // when the exact match is found break; } // When the distance shown here is less than shortest distance // found in next iteration or if the next shortest word is // yet to be found if ($levn <= $short || $short < 0) { // Setting the shortest distance and one having // closest match to the input word $close = $word_list; $short = $levn; } } echo "Input word: $ip\n"; if ($short == 0) { echo "The closest/exact match found to the input word is: $close\n"; } else { echo "Did you mean to spell: $close?\n"; } ?>
输出:
上面的示例向我们展示了可以实现此 levenshtein 函数的不同情况之一。在这里,我们通过将拼写错误的单词与包含正确单词列表的预定义数组进行比较来帮助用户纠正拼写错误的单词。
所以首先,我们接受用户输入的单词,通常是拼写错误的(长颈鹿)。我们正在定义一个正确的动物名称数组,如图所示,它也具有输入单词(长颈鹿)的正确拼写。 foreach 循环用于迭代数组列表并找到与输入匹配的最接近的单词,这是在 levenshtein 函数的帮助下完成的。当找到完全匹配或最接近的匹配时,循环就会中断。最后,我们将距离与短参数进行比较,如果距离为 0,则意味着找到输入单词的精确匹配,然后将其打印在输出中。
所以基本上levenshtein函数返回通过逐个字符比较给定的2个输入字符串返回的整数值的距离。前两个参数是必需的输入字符串,最后 3 个参数是可选的,表示删除、插入或替换操作的成本。
以上是PHP 编辑 ()的详细内容。更多信息请关注PHP中文网其他相关文章!