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

时间:2012-08-28 14:43:46

标签: php string string-comparison fuzzy-logic

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

我刚刚写了一个基于单词的字符串比较函数,而不是字符 - 在这里,以防万一需要它:

function wordsof($s) {
    $a = [];foreach(explode(" ",$s)as $w) $a[$w]++;
    return $a;
}

function compare($s1,$s2) {

    $w1 = wordsof($s1);if(!$w1) return 0;
    $w2 = wordsof($s2);if(!$w2) return 0;

    $totalLength = strlen(join("",$w1).join("",$w2)) || 1;

    $chDiff = 0;
    foreach($w1 as $word=>$x) if(!$w2[$word]) $chDiff+=strlen($word);
    foreach($w2 as $word=>$x) if(!$w1[$word]) $chDiff+=strlen($word);

    return $chDiff/$totalLength;

}

逻辑很简单:它在两种方式中查找另一个字符串中的每个字。长话重量更多。它给你一个介于0和1之间的浮点值。你可能想要在比较之前规范化字符串 - 空格修剪,多个空格替换为1,全部小写等。此外,它不是很快但是由于它不容易优化单词查找事物......

如果您不想污染全局命名空间,可以在比较器中实现“wordsof”。为了便于阅读,它是分开的。代码也有所简化,所以在你使用它之前测试它,但它应该完成这项工作。我正在使用原始版本。