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

use*_*659 2 php string string-comparison fuzzy-logic

任何人都可以建议我一个更好的方法(或最喜欢的方法)来找到两个字符串之间的匹配百分比(即这两个字符串(例如名称)在百分比方面有多接近)使用模糊逻辑.任何人都可以帮我写代码吗?我真的想知道从哪里开始..

dke*_*ner 8

单词比较器

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

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;

}
Run Code Online (Sandbox Code Playgroud)

此函数为您提供 0 到 1 之间的浮点值,其中 1 是总相似度。

让我们看看一些测试

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;

}
Run Code Online (Sandbox Code Playgroud)


小智 6

$str1 = 'Hello';
$str2 = 'Hello, World!';
$percent;
similar_text($str1, $str2, $percentage);
Run Code Online (Sandbox Code Playgroud)

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