IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Nombre de caractères similaires et position correcte dans 2 chaines [RegExp]


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut Nombre de caractères similaires et position correcte dans 2 chaines
    Bonjour,

    Je voudrais savoir si quelqu'un aurait un début de piste pour une fonction me permettant de générer "un score" à partir de 2 chaines de caractères.

    Par exemple, comparer "ma chaine 1" et "ta chaine 2" et me dire que x lettres similaires sont placées au même endroit.

    Le but étant de comparer une saisie utilisateur avec une chaine stockée et permettant une erreur "humaine" mais qui se rapproche fortement de la réponse.

    Je pense qu'il faut utiliser charAt et indexOf mais je ne vois pas bien comment

    Merci pour votre aide

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonsoir,
    tu peux faire le test avec les chaines transformées en tableaux avec la méthode split
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var chaine_1 = "bonjour vous !";
    var chaine_2 = "bonsoir vous";
    // recup sous forme de tableau
    var t_chaine_1 = chaine_1.split('');
    var t_chaine_2 = chaine_2.split('');
    // recup le plus court
    var nb_1 = t_chaine_1.length;
    var nb_2 = t_chaine_2.length;
    var nb = nb_1 < nb_2 ? nb_1 : nb_2;
    var i, sResult = "";
    // parcours les tableaux
    for( i = 0; i < nb; i++){
      if( t_chaine_1[i] == t_chaine_2[i]){
        sResult += i + ' -> ' + t_chaine_1[i] + ' identique\n';
      }
    }
    // affiche le resultat
    alert( sResult);

  3. #3
    Membre éclairé Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Par défaut
    Salut,
    ça ressemble à l'utilisation de l’algorithme de Levenshtein,
    http://fr.wikipedia.org/wiki/Distance_de_Levenshtein
    Un exemple en Javascript :
    http://phpjs.org/functions/levenshtein:463

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Salut,
    ça ressemble à l'utilisation de l’algorithme de Levenshtein,
    mais bon sang c'est bien sûr (Raymond Souplex)

    Je me rend compte, une fois de plus, que ce que je sais n'est rien à coté de ce que j'ignore!

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    et sans conversion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var ch="une chaîne";
    var ch2="six chaînes";
     
    for(var i=0,t=0;i<ch.length;i++){
    	if(ch.charAt(i)==ch2.charAt(i)){
    		t++
    	}
    }
     
    alert(t)

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    on peut aussi s'amuser un peu plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <script type="text/javascript">
     
    var ch="une chaîne";
    var ch2="chaîn euen";
     
    if(ch.split("").sort().toString().toLowerCase()==ch2.split("").sort().toString().toLowerCase()){
    	alert(ch + "\n\nest un anagramme parfait de\n\n" + ch2)
    }
    else{
    	for(var i=0,t=0,s;i<ch.length;i++){
    		if(ch.charAt(i)==ch2.charAt(i)){
    			t++
    		}
    	}
    	if(ch==ch2){
    		alert("Les deux chaînes sont identiques.")
    	}
    	else{
    		s=t>1?"s":"";
    		alert("Il y a " + t + " caractère" + s + " commun" + s + " entre \n\n" + ch + "\n\net\n\n" + ch2)
    	}
    }
     
    </script>
    mais faut vraiment avoir du temps perdre;

  7. #7
    Membre éclairé Avatar de Billy KiT
    Inscrit en
    Mars 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 66
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    mais bon sang c'est bien sûr (Raymond Souplex)
    Moi je trouve super "pro" de citer ses sources

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    D'abord merci à tous pour vos réponses, je n'ai pas eu le temps de revenir avant désolé.
    Vous m'avez donné plus que des pistes là!

    Je pense que je devrais arriver à faire ce que je veux avec cette fonction http://phpjs.org/functions/levenshtein:463

    De mon côté j'avais également trouvé ca : http://phpjs.org/functions/similar_text:902
    mais niveau pertinence de résultat, je pense que ca se vaut

    Il faut juste qu'ensuite je calcule un % de réussite par rapport à la longueur de la chaine pour savoir si la saisie est entre 95% et 100% (par rapport à la chaine attendue)

    @Willpower normalement ce genre de cas ne pourra pas se produire car j'utilise des cases correspondant chacune à une lettre. Le nombre de cases correspondants dès le début à la longueur de la chaine attendue.

    Merci encore à tous pour votre aide

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Citation Envoyé par Orangevinz Voir le message
    Je voudrais savoir si quelqu'un aurait un début de piste pour une fonction me permettant de générer "un score" à partir de 2 chaines de caractères.

    Par exemple, comparer "ma chaine 1" et "ta chaine 2" et me dire que x lettres similaires sont placées au même endroit.
    le cahier des charges est relativement clair et les réponses me semble bien correspondre à cette attente, mais peut être me trompes je!

  10. #10
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    oui chuis assez d'accord...

    me manquait juste l'expression "cahier des charges"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [W3C] Nombre de caractère dans les formulaires
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 01h37
  2. [PERL]Nombre d'un caractère présent dans une chaine
    Par LE NEINDRE dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 13h58
  3. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50
  4. Connaitre le nombre de caractère ";" dans un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/11/2004, 17h36
  5. Réponses: 7
    Dernier message: 16/11/2004, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo