J'ai un script qui me permet de corréler des données similaires par comparaison de chaines (pour un comparateur):
function ressemblance($chaine_recherchee, $chaine_de_contenu) {
//on supprime des caracteres de la chaine recherchée, n'entrant pas en compte dans le calcul de la ressemblance.
//trim() sert a supprimer les espaces potentielles en debut et fin de chaine.
//et strtolower() renvoie la chaîne en minuscules
$cle_chaine_rech = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_recherchee)));
//on renvoie aussi la chaîne de contenu en minuscules et on explose les chaines, pour obtenir des tableaux
$explode_contenu = explode(" ", strtolower($chaine_de_contenu));
$explode_cle = explode(" ", $cle_chaine_rech);
//on compte le contenu des tableau
$count_tab_cle = count($explode_cle);
$count_tab_contenu = count($explode_contenu);
//on compare les tableaux
for($i = 0; $i != $count_tab_contenu; $i++) $pointage[$i] = (in_array($explode_contenu[$i], $explode_cle))?1:0;
// on calcule la somme des valeurs du tableau, et on la retourne sous forme de pourcentage
return round(((array_sum($pointage)/$count_tab_contenu)*100), 2) . "%";
}
// les 2 paramettres representent respectivement la chaine de mots recherchées, et la chaine où l'on effectue la recherche
$chaine1 = 'Le Donjon Agde'; // test de recherche dans une chaîne
$chaine2 = 'HÔTEL LE DONJON AGDE'; // chaîne de contenu dans laquelle nous effectuons la recherche des mots de la chaîne 1
echo "Chaine 1 = ".$chaine1."<br/>Chaine 2 = ".$chaine2."<br/>";
echo "Calcul du pourcentage de ressemblance: ".ressemblance($chaine1, $chaine2)."<br/>";
Au vu du nombre de données à comparer (plusieurs centaines de milliers), pensez vous que si je considére un pourcentage de ressemblance à 80% comme etant le meme éléments, c'est pertinant ?A noter que les recupere des tables, le nom de l'élément, ville de l'elément (par exemple $chaine1 = 'Le Donjon Agde'; $chaine2 = 'HÔTEL LE DONJON AGDE';).
Merci de votre aide.