COMPARAISON DE 2 CHAINES , ET RETOUR DU POURCENTAGE DE RESSEMBLANCE

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 26 août 2006 à 19:09
vduffaut Messages postés 31 Date d'inscription mardi 13 avril 2004 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/39274-comparaison-de-2-chaines-et-retour-du-pourcentage-de-ressemblance

vduffaut Messages postés 31 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 3 mars 2008
19 févr. 2007 à 21:53
Et je vais même plus loin en utilisant la fonction similar_text qui calcule directement ce pourcentage...

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é "-", "(", ")", "[", "]"
vduffaut Messages postés 31 Date d'inscription mardi 13 avril 2004 Statut Membre Derniè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

$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...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
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és 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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és 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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és 151 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 juillet 2018 2
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és 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 août 2006 à 19:09
hello,

jette un oeil à cette fonction Franco : levenshtein (php.net).
Tu simplifieras largement ta fonction ;-)
Rejoignez-nous