有人能为我建议一种更好的方法(或者最受欢迎的方法)来使用模糊逻辑查找两个字符串之间的匹配百分比吗?例如,如何计算这两个字符串(例如,名称)在百分比方面的相关性。有人能帮我编写代码吗?我真的很想知道该从哪里开始。
有人能为我建议一种更好的方法(或者最受欢迎的方法)来使用模糊逻辑查找两个字符串之间的匹配百分比吗?例如,如何计算这两个字符串(例如,名称)在百分比方面的相关性。有人能帮我编写代码吗?我真的很想知道该从哪里开始。
$str1 = 'Hello';
$str2 = 'Hello, World!';
$percent;
similar_text($str1, $str2, $percentage);
这里是一个基于单词的比较 - 它比基于字符的比较要快得多,而且通常更适合用单词比较人类文本。但是,单词长度确实很重要;为了获得更好的结果,该算法会考虑这一点。请查看末尾的测试结果;我认为它们几乎符合人类的判断。
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
$matchPercentage = ($str1 == $str2) ? 100 : 0;
。不过说正经点,您能详细解释一下吗? - netcoderlevenstein()
或soundex()
。 - Dejan Marjanović