任何人都可以建议我找到一个更好的方法(或最优选的方法)来找到两个字符串之间的匹配百分比(即这两个字符串(例如名称)在百分比方面的相关程度)使用模糊逻辑。任何人都可以帮我写代码吗?我真的想知道从哪里开始..
答案 0 :(得分:6)
$str1 = 'Hello';
$str2 = 'Hello, World!';
$percent;
similar_text($str1, $str2, $percentage);
答案 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”。为了便于阅读,它是分开的。代码也有所简化,所以在你使用它之前测试它,但它应该完成这项工作。我正在使用原始版本。