如何在php中检查两个字符串的相似性


How can I check two strings for similarity in php?

假设我有两个字符串

$string1 = "Hello my name is Steve and this is spam";
$string2 = "Hello my name is Steven and this comment is spam";

这两根绳子很像。

有没有一种方法可以比较这些,比如php中的if ($string1 like $string2)

您可以使用Levenstein算法计算相似性指数。它计算需要更改的字符数,以便将第一个输入转换为第二个输入,或者反过来:

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(),它以类似的方式工作。

然后对字符串进行散列并比较散列。我认为这比任何字符串比较函数都快。

原因。字符串比较函数逐字节比较每个字符。散列函数一次获取整组字符并生成其散列。

当然,您应该使用像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