Ok tutaj jest moja funkcja, która sprawia, że znacznie interesujący.
Sprawdzam podobieństwo ciągów.
Oto kryteria, których używam.
- Kolejność słów jest ważne
- Słowa mogą mieć 85% podobieństwa.
przykład:
$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);
Algorytm: +1) Sprawdź podobieństwo słów i tworzyć czyste ciągi słów „prawo” (w takiej kolejności, że pojawiają się w słownictwo). WYJŚCIE: "ile to kosztuje" 2) utwórz czysty ciąg z "prawymi słowami", aby pojawił się w danych użytkownika. WYJŚCIE: "ile to kosztuje" 3) Porównaj dwa wyjścia - jeśli nie to samo - zwróć nie, w przeciwnym wypadku, jeśli ten sam zwrot tak.
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 chcielibyśmy usłyszeć swoją opinię i sugestie, jak poprawić
By jednak świadomi, że "podobne" może oznaczać różne rzeczy. –
Proszę zdefiniować "podobieństwo". Czy jest to związane z pojedynczymi postaciami, słowami, frazami? Nie myśl, że "podobny_tekst" wykona pracę. – enenen
Funkcja similar_text robi coś takiego, ale przeczytaj http://stackoverflow.com/questions/14136349/how-does-similar-text-work, aby zobaczyć, jak to działa. Może nie robić tego, czego się spodziewasz. Jeśli chcesz uzyskać procent pasujących słów, proponuję niestandardową metodę, używając jakiegoś rodzaju eksplodować w oczyszczonym ciągu. –