Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Levenshtein comparison from 0 to 100: 0 being the most similar, 100 being the least (from php.net)
- */
- function levenshteinDistance2($str1, $str2) {
- $len1 = mb_strlen($str1);
- $len2 = mb_strlen($str2);
- // strip common prefix
- $i = 0;
- do {
- if(mb_substr($str1, $i, 1) != mb_substr($str2, $i, 1))
- break;
- $i++;
- $len1--;
- $len2--;
- } while($len1 > 0 && $len2 > 0);
- if($i > 0) {
- $str1 = mb_substr($str1, $i);
- $str2 = mb_substr($str2, $i);
- }
- // strip common suffix
- $i = 0;
- do {
- if(mb_substr($str1, $len1-1, 1) != mb_substr($str2, $len2-1, 1))
- break;
- $i++;
- $len1--;
- $len2--;
- } while($len1 > 0 && $len2 > 0);
- if($i > 0) {
- $str1 = mb_substr($str1, 0, $len1);
- $str2 = mb_substr($str2, 0, $len2);
- }
- if ($len1 == 0)
- return $len2;
- if ($len2 == 0)
- return $len1;
- $v0 = range(0, $len1);
- $v1 = array();
- for ($i = 1; $i <= $len2; $i++) {
- $v1[0] = $i;
- $str2j = mb_substr($str2, $i - 1, 1);
- for ($j = 1; $j <= $len1; $j++) {
- $cost = (mb_substr($str1, $j - 1, 1) == $str2j) ? 0 : 1;
- $m_min = $v0[$j] + 1;
- $b = $v1[$j - 1] + 1;
- $c = $v0[$j - 1] + $cost;
- if ($b < $m_min)
- $m_min = $b;
- if ($c < $m_min)
- $m_min = $c;
- $v1[$j] = $m_min;
- }
- $vTmp = $v0;
- $v0 = $v1;
- $v1 = $vTmp;
- }
- return $v0[$len1];
- }
Advertisement
Add Comment
Please, Sign In to add comment