说我有两个字符串如何在php中检查两个字符串的相似性?
$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";
这两个字符串是一样的。
有没有办法比较这些,如在if ($string1 like $string2)
在PHP?
说我有两个字符串如何在php中检查两个字符串的相似性?
$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";
这两个字符串是一样的。
有没有办法比较这些,如在if ($string1 like $string2)
在PHP?
您可以使用the levenshtein algorithm来计算相似度索引。据其计算,需要为第一输入转换为第二或周围的其他方式改变的字符数:
levenshtein("bar", "baz"); // 1 character difference
levenshtein("bar", "foo"); // 3 character difference
$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";
levenshtein($string1, $string2); // 9 character difference
@TimCooper还建议similar_text()
,其以类似的方式工作。
请您举个例子吗? – user3096443
伟大的答案,从来不知道[levenshtein](http://www.php.net/manual/en/function.levenshtein.php)。绝对将来一定会使用它! – celeriko
警告:levenshtein():参数字符串太长 – user3096443
然后对字符串进行散列并比较散列。我认为这比任何字符串比较函数更快。
原因。字符串比较函数比较每个字符 - 逐字节。哈希函数一次获取所有字符并生成哈希。
但是,当然你应该使用像md5这样的“简单”散列函数。不是专门用于安全散列的hash_pbkdf。这意味着pbkdf计算哈希非常慢,因此atacker在给定时间不能生成如此多的哈希。但那是题外话;-)
或者: 实现此https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm甚至更好(快)https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm
您可能会发现['similar_text'(http://php.net/similar_text)是有用的。 –