字符串函数

PHP levenshtein() 函数

主题:PHP 字符串参考上一页|下一页

说明

levenshtein() 函数计算两个字符串之间的 Levenshtein 距离。

下表总结了该函数的技术细节。

返回值: 返回两个参数字符串之间的 Levenshtein-Distance 或 -1,如果参数字符串之一长于 255 个字符的限制。
版本: PHP 4.0.1+

语法

levenshtein() 函数的基本语法如下:

levenshtein(string1, string2, cost_insert, cost_replacement, cost_delete);

在其最简单的形式中,该函数将仅将两个字符串作为参数,并将仅计算将 string1 转换为 string2 所需的插入、替换和删除操作的数量。

下面的例子展示了 levenshtein() 函数的作用。

<?php
// 计算距离
echo levenshtein("flour", "flower")."<br>";
echo levenshtein("weight", "wait")."<br>";
echo levenshtein("hour", "our");
?>

提示: levenshtein() 函数比 similar_text() 函数快。 然而,similar_text() 提供了更好的结果和更少的修改。

注意: Levenshtein 距离定义为将 string1 转换为 string2 所需替换、插入或删除的最少字符数。 该算法的复杂度为O(m*n),其中n和m分别为string1string2的长度。


参数

levenshtein() 函数接受以下参数。

参数 说明
string1 必填。 指定要评估 Levenshtein 距离的第一个字符串。
string2 必填。 指定要评估 Levenshtein 距离的第二个字符串。
cost_insert 可选。 定义插入成本。
cost_replacement 可选。 定义更换成本。
cost_delete 可选。 定义删除成本。

更多示例

这里有更多示例展示了 levenshtein() 函数的实际工作原理:

以下示例演示了如何在单词数组中搜索与拼写错误的单词最接近的匹配项。 您可以根据需要调整结果的灵敏度。

<?php
// 拼错的单词
$input = "calender";

// 要检查的单词数组
$words  = array("seize", "calendar", "foreign", "category", "quiet");

// 还没有找到最短距离
$shortest = -1;

// 遍历单词以找到最接近的单词
foreach($words as $word){

    // 计算输入词和当前词的距离
    $lev = levenshtein($input, $word);

    // Check for an exact match
    if($lev == 0){
        // 当前单词最接近且完全匹配
        $closest = $word;
        $shortest = 0;

        // 跳出循环,因为找到完全匹配
        break;
    }

    /* 如果这个距离小于下一个找到的最短距离,
     或者如果还没有找到下一个最短的单词。 */
    if($lev <= $shortest || $shortest < 0){
        // Set the closest match, and shortest distance
        $closest  = $word;
        $shortest = $lev;
    }
}

echo "Input word: $input" . "<br>";

// 指定结果的敏感度
if($shortest > 3){
    echo "No appropriate match found." . "<br>";
} elseif($shortest == 0){
    echo "Exact match found: $closest" . "<br>";
} else{
    echo "Did you mean: $closest?";
}
?>
Advertisements