Comment comparer intelligemment deux chaines ?

Messages postés
6
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
27 juin 2012
- - Dernière réponse :  Utilisateur anonyme - 28 juin 2012 à 15:52
Bonjour,

Evidemment, les réponses genre "equals", "equalsIgnoreCase" ou "compareTo" ne vont pas m'avancer. En fait je cherche une méthode qui puissent me fournir un pourcentage de similarité entre deux chaines de caractères. Je ne comprends pas bien la signification de l'entier retourné par la méthode de "compareTo" mais ça ne semble pas traduire réellement le niveau de ressemblance entre deux chaines.
Exemple de résultat attendu :

String str1 = "azerty";
String str2 = "qsdfg";

-> "str1" et "str2" sont similaires à 0%

String str1 = "Je suis très bien dans mon lit";
String str2 = "Je suis bien dans mon lit";

-> "str1" et "str2" sont similaires à 85% (calcul approximatif moins précis que celui que devrait renvoyer l'algorithme)

Didier
Afficher la suite 

3 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
0
Merci
Salut,

Je crois que l'algorithme le plus simple et répandu pour ça est le calcul de la
Distance de Levenshtein.
Commenter la réponse de cs_jojolemariole
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248
0
Merci
Salut,

J'ai codé ca il y a quelques temps, ce n'est pas un algo connu mais ca fonctionnait assez bien : http://www.javafr.com/codes/COMPARER-CHAINES-CARACTERES-AVEC-MARGE-ERREUR_52349.aspx

Tu peux définir un seuil de similarité des deux chaines, je te laisse regarder, poses des questions si tu n'arrives pas à l'utiliser.

Bon courage
Commenter la réponse de cs_Julien39
0
Merci
De mémoire, a.compareTo(b) te permet de comparer deux chaines a et b dans le sens où la fonction vérifie si a et avant b d'un point de vue alphabétique.
compareTo renvoie un nombre négatif si a et avant b, 0 si a et b sont identiques et un positif si a est après b.

Par exemple, avec String a = "choucroute", a.compareTo("patate") va te donner une valeur négative.


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
Commenter la réponse de Utilisateur anonyme