COMPARAISON DE 2 CHAINES , ET RETOUR DU POURCENTAGE DE RESSEMBLANCE
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
26 août 2006 à 19:09
vduffaut
Messages postés31Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention 3 mars 2008
-
19 févr. 2007 à 21:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
J'ai aussi remplacé le "*" par un "."
et ajouté "-", "(", ")", "[", "]"
vduffaut
Messages postés31Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention 3 mars 2008 19 févr. 2007 à 18:52
JE prends bonne note (?) des critiques mais je trouve l'idée intéressante et je m'en sers pour émettre, ou non) une alerte de mise à jour pour mes abonnés.
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
De plus les accents ne sont pas éliminés avant comparaison...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 août 2006 à 12:43
on peut calculer une "distance" entre deux chaines en prennant un alphabet pour calculer la distance entre deux lettres : sur un clavier par exemple, ce qui permetrait de minimiser l'importance des fautes de frapes : deux lettres proches sur le clavier seraient considérés comme proches...
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é...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 26 août 2006 à 20:43
Couplé à du soundex, c'est très intéressant. Au passage, je fais de la pub : tu peux jeter un oeil à mes codes soundex2 francisé, et phonex. Tu verras, ça peut apporter de l'eau à ton code (bien que cette expression ne veuille rien dire...)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 26 août 2006 à 20:42
Moi, je les apprends par coeur ;-)
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.
franco_se
Messages postés151Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 juillet 20182 26 août 2006 à 20:13
je la connaissais pas cette fonction, merci. ( en meme tps, il y a pres de 1300 fonctions php, comment toutes les connaitres ?)
enfin, maintenant, faut que je comprenne bien son fonctionnement, et comment l'integrer lol
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 26 août 2006 à 19:09
hello,
jette un oeil à cette fonction Franco : levenshtein (php.net).
Tu simplifieras largement ta fonction ;-)
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.
26 août 2006 à 20:13
enfin, maintenant, faut que je comprenne bien son fonctionnement, et comment l'integrer lol
26 août 2006 à 19:09
jette un oeil à cette fonction Franco : levenshtein (php.net).
Tu simplifieras largement ta fonction ;-)