Ok here is my function that makes it much interesting.
I'm checking approximately similarity of strings.
Here is a criteria I use for that.
- The order of the words is important
- The words can have 85% of similarity.
Example:
$string1 = "How much will it cost to me" (string in vocabulary)
$string2 = "How much does costs it " //("costs" instead "cost" -is a mistake) (user input);
Algorithm:
1) Check the similarity of words and create clean strings with "right" words (in the order it appear in vocabulary).
OUTPUT: "how much it cost"
2) create clean string with "right words" in order it appear in user input.
OUTPUT: "how much cost it"
3)Compare two outputs - if not the same - return no, else if same return yes.
error_reporting(E_ALL);
ini_set('display_errors', true);
$string1="сколько это стоит ваще" ;
$string2= "сколько будет стоить это будет мне";
if(compareStrings($string1, $string2)) {
echo "yes";
} else {
echo 'no';
}
//echo compareStrings($string1, $string2);
function compareStrings($s1, $s2) {
if (strlen($s1)==0 || strlen($s2)==0) {
return 0;
}
while (strpos($s1, " ")!==false) {
$s1 = str_replace(" ", " ", $s1);
}
while (strpos($s2, " ")!==false) {
$s2 = str_replace(" ", " ", $s2);
}
$ar1 = explode(" ",$s1);
$ar2 = explode(" ",$s2);
// $array1 = array_flip($ar1);
// $array2 = array_flip($ar2);
$l1 = count($ar1);
$l2 = count($ar2);
$meaning="";
$rightorder="";
$compare=0;
for ($i=0;$i<$l1;$i++) {
for ($j=0;$j<$l2;$j++) {
$compare = (similar_text($ar1[$i],$ar2[$j],$percent)) ;
// echo $compare;
if ($percent>=85) {
$meaning=$meaning." ".$ar1[$i];
$rightorder=$rightorder." ".$ar1[$j];
$compare=0;
}
}
}
//print_r($rightorder);
if ($rightorder==$meaning) {
return true;
} else {
return false;
}
}
i would love to hear your opinion and suggestion how to improve it