Soyez le premier à donner votre avis sur cette source.
Snippet vu 20 596 fois - Téléchargée 26 fois
<?php 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 = 'test de recherche dans une chaîne'; $chaine2 = '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/>"; ?>
19 févr. 2007 à 21:53
similar_texte($chaine1,$chaine2,$poucent);
en utilisant :
$chaine1 = sansAccents(stripslashes(strtolower(trim(str_replace(array("!", "?", ",", ";", ".", "-", "(", ")", "[", "]"), "", strip_tags($chaine1))))));
et évidemment le même appel pour $chaine2 !
J'ai aussi remplacé le "*" par un "."
et ajouté "-", "(", ")", "[", "]"
19 févr. 2007 à 18:52
En revanche, il y a un erreur car si on compare deus chaînes identiques, on n'obtient pas 100%... En effet, le traitement de base effectué n'est pas identique pour les 2... Je vais regarder cette fonction évoquée par Malalam
$cle_chaine_rech = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_recherchee)));
J'ai donc ajouté :
$cle_chaine_cont = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_de_contenu)));
De plus les accents ne sont pas éliminés avant comparaison...
28 août 2006 à 12:43
soundex n'a pas cette fonction, pour soundex, les mots doivent avoir une sonoritée proche...
mais là, je ne vois pas trop ce que ton algo fait, tu pourrais détailler ? selon ce que j'ai vu, ça prend chaque lettre de la première chaine, et ça regarde si c'est dans la seconde chaine... mais donc, on s'en moque de la position dans la seconde chaine... bref, ton algo n'est pas réaliste à mon avis...
for($i = 0; $i != $count_tab_contenu; $i++)
ici un foreach devrait être plus approprié...
26 août 2006 à 20:43
26 août 2006 à 20:42
Nan je plaisante...
Levenshtein () utilise l'algo de...Levenshtein ;-) Cet algo calcule la distance entre 2 chaînes (en caractères). La fonction te renvoie donc un entier. (sauf options).
Reste plus qu'à calculer un pourcentage après.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.