oracle259 Posted October 1, 2006 Share Posted October 1, 2006 I think the similar_text() function is very inaccurate and not very useful. Do you know if anyone has written a script that improves on it or has a new script that is more accurate.Thanks Quote Link to comment Share on other sites More sharing options...
zq29 Posted October 1, 2006 Share Posted October 1, 2006 Have you tried the levenshtein() function instead of similar_text()? Quote Link to comment Share on other sites More sharing options...
oracle259 Posted October 1, 2006 Author Share Posted October 1, 2006 Yup but it seems to do nothing more than return the strlen($word1) - strlen($word2). Which doesnt do much Quote Link to comment Share on other sites More sharing options...
zq29 Posted October 2, 2006 Share Posted October 2, 2006 [quote author=oracle259 link=topic=110171.msg444880#msg444880 date=1159736698]Yup but it seems to do nothing more than return the strlen($word1) - strlen($word2). Which doesnt do much[/quote]Not quite. The function returns the Levenshtein-Distance between two strings. The Levenshtein distance is defined as the minimal number of characters you have to replace, insert or delete to transform string 1 into string 2.The example from the manual is quite useful as a starting point:[code]<?php// input misspelled word$input = 'carrrot';// array of words to check against$words = array('apple','pineapple','banana','orange', 'radish','carrot','pea','bean','potato');// no shortest distance found, yet$shortest = -1;// loop through words to find the closestforeach ($words as $word) { // calculate the distance between the input word, // and the current word $lev = levenshtein($input, $word); // check for an exact match if ($lev == 0) { // closest word is this one (exact match) $closest = $word; $shortest = 0; // break out of the loop; we've found an exact match break; } // if this distance is less than the next found shortest // distance, OR if a next shortest word has not yet been found if ($lev <= $shortest || $shortest < 0) { // set the closest match, and shortest distance $closest = $word; $shortest = $lev; }}echo "Input word: $input\n";if ($shortest == 0) { echo "Exact match found: $closest\n";} else { echo "Did you mean: $closest?\n";}?>[/code] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.