crouttedepain Posté 1 Août 2008 Posté 1 Août 2008 salut à tous, voilà il me semble que l'on m'a parlé d'une fonction qui compare deux chaines de caractères et donne le taux de différence en pourcentage mais le problème c'est que je ne m'en souviens plus et mon copain Google ne m'aide pas non plus. Quelqu'un a déjà utilisé une tel fonction ?
Kioob Posté 1 Août 2008 Posté 1 Août 2008 Hello, je ne connais pas de fonction PHP qui fasse ça en standard, mais tu peux très facilement convertir le résultat de levenshtein() en pourcentage.
crouttedepain Posté 1 Août 2008 Auteur Posté 1 Août 2008 ha oui en effet ça a l'air assez puissant cette fonction, j'ai essayé l'exemple donner sur la page de ton lien; pour chaque mot ça donne un indice différents mais je ne sais pas vraiment a quoi cela correspond; admettons par exemple : $lev = levenshtein($leMotEntré, $leMotAcomparé); est ce que une operation du style suffirai pour une représentation du pourcentage ? : $pourc = 100 - $lev;
crouttedepain Posté 1 Août 2008 Auteur Posté 1 Août 2008 bin je sais faire un pourcentage si je sais si c'est des carotte ou des choux, mais là pour moi cette indice que me donne cette fonction est très énigmatique pour moi? si j'ai bien compris si l'indice est 0 c'est égale à 100% de ressemblance 0 = 100% alors j'ai eu le reflex de me dire que pour refléter ce chiffre en pourcentage était de le soustraire à 100 (a noter que même si ce n'est pas exacte ça garde le même ordre )
Kioob Posté 1 Août 2008 Posté 1 Août 2008 Pourtant la première ligne de la doc me semble claire : La distance Levenshtein est définie comme le nombre minimal de caractères qu'il faut remplacer, insérer ou modifier pour transformer la chaîne str1 en str2 . Bref, ça retourne juste le nombre de caractères "différents"...
jcaron Posté 1 Août 2008 Posté 1 Août 2008 Lis un peu la doc qu'on te propose... La distance Levenshtein est le nombre d'opérations qu'il faut effectuer pour passer d'un mot à l'autre. C'est pour ça que 0 = les mots sont identiques (il n'y a aucune opération à effectuer). Dans le pire des cas, je pense que la distance max va être la longueur de la plus grande des deux chaînes (on remplace toutes les lettres de la chaîne la plus courte, et on ajoute toutes les lettres manquantes). Le reste est trivial. D'ailleurs il y a même un exemple dans la page en question qui fait tout ça... Jacques.
crouttedepain Posté 1 Août 2008 Auteur Posté 1 Août 2008 oui mais d'accord,je juste dit que je ne savais pas calculer un pourcentage d'une distance Levenshtein mais j'ai pas dit que je ne savais pas lire , j'ai même pris le temps de tester l'exemple de la doc, donc j'avais déjà un peu compris le principe; Je disais de l'indice qu'il était "énigmatique", dans le sens où on ne connait pas le code source de cette fonction et donc on ne connait pas le mécanisme exacte de l'algorithme ainsi que les paramètres en priorité. j'ai quand même la trouvé la solution pour transformer cette distance en pourcentage, pour les interressés : $pourcentage = ( 1-levenshtein($str1, $str2)/max(strlen($str1), strlen($str2))) * 100; tu peux très facilement convertir le résultat de levenshtein() en pourcentage. je sais pas pour vous mais pour cette formule tant que je n'avais pas compris que la distance Levenshtein maximum était la taille de la chaine la plus grande, je l'aurai pas trouvé tout seul ...désolé d'avoir baissé le niveau du forum en tout cas merci de vos réponses En espérant quand même que mon incompétence incultivée d'ignare illettré servira à bien d'autre
Martoclou Posté 2 Août 2008 Posté 2 Août 2008 Juste une petite remarque pour éviter des soucis : cette fonction ne marchera pas bien en utf-8.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant