在php中查找两个字符串之间的匹配百分比


Find the match percentage between two strings in php?

有人能给我推荐一种更好的方法(或最喜欢的方法)来使用模糊逻辑找到两个字符串之间的匹配百分比(即这两个字符串(例如名称)在百分比方面的关系有多密切)吗。?有人能帮我写代码吗?真的,我想知道从哪里开始。。

$str1 = 'Hello';
$str2 = 'Hello, World!';
$percent;
similar_text($str1, $str2, $percentage);

http://php.net/manual/en/function.similar-text.php

字比较器

这里有一个基于单词的比较-它比基于字符的比较快得多,而且按单词比较人类文本通常更有意义。然而,单词长度确实很重要;该算法考虑了这一点,以获得更好的结果。最后检查测试结果;我认为他们几乎是一个人会说的话。

function wordSimilarity($s1,$s2) {
    $words1 = preg_split('/'s+/',$s1);
    $words2 = preg_split('/'s+/',$s2);
    $diffs1 = array_diff($words2,$words1);
    $diffs2 = array_diff($words1,$words2);
    $diffsLength = strlen(join("",$diffs1).join("",$diffs2));
    $wordsLength = strlen(join("",$words1).join("",$words2));
    if(!$wordsLength) return 0;
    $differenceRate = ( $diffsLength / $wordsLength );
    $similarityRate = 1 - $differenceRate;
    return $similarityRate;
}

此函数提供一个介于0和1之间的浮点值,其中1是总相似性。

让我们看看一些测试


    $test = "this is something you've never done before";
    
    wordSimilarity($test,"this is something you've never done before");  //  1.000
    wordSimilarity($test,"this is something");                           //  0.588
    wordSimilarity($test,"this is nothing you have ever done");          //  0.312
    wordSimilarity($test,"leave me alone with lorem ipsum");             //  0.000
    wordSimilarity($test,"before you do something you've never done");   //  0.845
    wordSimilarity($test,"never have i ever done this");                 //  0.448