說我有兩個字符串如何在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)是有用的。 –