Comparaison de mots

mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 15 nov. 2006 à 09:10
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 15 nov. 2006 à 17:41
Bonjour

je cherche à faire un algo qui compare 2 mots
et qui en sortie me dit (pas de tests sur les majuscules, accents et cedilles : je transforme tout avant de faire les tests) :
- si les 2 mots sont identiques
- si l'un des mots est anagramme de l'autre
- si on "brule" c'est à dire que l'on est tres proche

pour le 1er cas, pas de problème (soit avec strcmp, soit en parcourant les 2 mots)

pour le 2eme cas, j'ai fait un truc, mais au niveau performance, je ne sais pas si c'est bon :
je trie mes mots par ordre alphabetique
ex : je veux tester 'sortie' et 'roties'
sortie devient eiorst
roties devient eiorst
je teste donc eiorst avec eiorst qui me retourne 'vrai'
et je teste si sortie est egal à roties (qui est faux)
[je suis quand meme obliger de faire ce test, sinon je suis dans le cas 1]
donc sortie et anagramme de roties
--> est-ce que l'on peut faire mieux ?
car on boucle plusieurs fois sur les memes objets :-/


pour le 3eme cas:
c'est un peu plus complexe
pour le moment j'arrive à quelque chose avec le nombre de lettre
c'est à dire que je teste sur le nombre de lettres presentes
et non sur la position
comment integrer un test de position en + ? (si c'est facilement réalisable et pas trop lourd)
(ca revient un peu au test que l'on voit dans les editeurs de texte, quand il trouve un mot qu'il ne connait pas et qu'il propose un mot proche)


merci

4 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
15 nov. 2006 à 09:25
Salut mogwai !

ton idée pour le 2ème cas est, à mon avis bonne, parce que je ne vois pas comment faire sans parcourir plusieurs fois au moins une des chaines.
Côté performance, tout dépend maintenant comment tu as codé tout ça !
Pour le 3ème cas, c'est assez délicat. Il faut d'abord définir précisément ce que tu entends par "brûler".
Ca peut être une seule lettre erronée (avec le bon nombre de lettre) ou bien une lettre manquante, ou encore un mot de la même famille (ex : avion et avionique).

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
15 nov. 2006 à 16:30
pour le 3eme cas
voila ce que j'ai déjà fait :
je teste sur le nombre de lettres
par exemple si le mot à trouver est "sortie"
a) si je le compare à "torse", ca me renvoie 1 lettre d'ecart
b) si je le compare à "ortie", ca me renvoie 1 lettre d'ecart
c) si je le compare à "sorties", ca me renvoie 1 lettre d'ecart

ce je voudrais que :
les points b et c me renvoient "ca brule"
le point a me renvoit "t'es pas loin"

donc c'est + dans le cas des mots de meme famille ou mots tres proches

merci par avance
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
15 nov. 2006 à 16:56
Essaye de jouer avec un pourcentage de nombre de lettres présentes dans le mot.
Ensuite tu peux essayer de voir si par exemple le début ou la fin est bonne.
Ya sûrement d'autres astuces mais pour l'instant je ne vois que ça !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
15 nov. 2006 à 17:41
Tu as aussi la distance de Levenshtein qui te permet de savoir le nombre de modification a faire sur une chaine pour arriver a une autre.

http://fr.wikipedia.org/wiki/Distance_de_Levenshtein
0
Rejoignez-nous