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

Algorithmes et structures de données Discussion :

str : Comparaison et coef. de corrélation


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Novembre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2009
    Messages : 26
    Points : 22
    Points
    22
    Par défaut str : Comparaison et coef. de corrélation
    Hello à tous,

    Tout d'abord, un grand merci à ceux et celles qui liront mon sujet/problème du "jour".

    Je cherche à comparer deux chaînes de caractères dont la longueur n'est pas forcément identique. La fonction qui ferait ce travail, retournerait un coefficient de corrélation.
    Ce coefficient aurait la valeur 1, si les 2 chaînes de caractères sont identiques. 0, si aucun caractères de la seconde chaîne n'est commun avec la première, même à une position différente. Et bien entendu, une valeur entre 0 et 1 suivant la correspondance des deux chaînes.

    Je cherche par exemple à gérer les erreurs de frappes ou de différences de chaînes de type.
    s1 = 'MATLAB' et s2 = 'MATAB'.
    ou
    s1 = 'Developpez.com' et s2 = 'Developer.com'.
    ou
    s1 = 'MATLAB' et s2 = 'FAQ MATLAB'.
    ou
    s1 = 'Stéphan' et s2 = 'Stéfane'.
    ou
    s1 = 'Laura' et s2 = 'Sandra'.
    etc

    Est-ce que l'un de vous aurez déjà vu une telle fonction ? Si non, auriez-vous quelques pistes d'algorithme pour arriver à mes fins ?

    Merci d'avances.

    Stéphan_S

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Une petite idée en utilisant la fonction de correlation :
    Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
    coef = corrcoef([s1(:)-0;zeros(length(s2)-length(s1),1)],[s2(:)-0;zeros(length(s1)-length(s2),1)]);
    Ca marche à peu près tant qu'il n'y a pas de caractère spéciaux (. é) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MATLAB MATAB : 0.5617
    Developpez.com Developer.com : 0.011839
    MATLAB FAQ MATLAB : 0.27173
    Stéphan Stéfane : 1
    Laura Sandra : 0.36103
    Il faudrait enlever ces caractères et améliorer la façon dont je rend les vecteurs de même longueur (clairement mettre des 0 n'est pas une bonne idée).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Novembre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2009
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Merci FLB,

    Je trouve effectivement que c'est un bon début.

    Par contre comme les matrices x et y doivent être de même dimensions, je ne vois pas bien comment faire différemment que remplir par des 0 !

    Si non j'ai quand même l'impression d'avoir des valeurs un poil bizarre avec le code que tu me proposes !!?????!!

    Si tu as une idée pour améliorer tout ça, voir une autre idée, je suis preneur !

    Bonne soirée

    Stéphan_S

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il existe les distances de Levenshtein et Damerau-Levenshtein.
    Il n'y a pas de fonction MATLAB existante à ma connaissance, mais tu pourras facilement le coder à partir de Wikipédia.

  5. #5
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Tu peux t'inspirer des algos d'alignement de séquence utilisés en biologie également : http://fr.wikipedia.org/wiki/Alignem...de_comparaison

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Novembre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2009
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Merci à tous.

    Je regarde tout ça de près et reviens vers vous pour vous dire ce que cela a donné.

    Bonne nuit.

    Stéphan_S

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    j'avais fait une petite fonction (en C) pour comparer 2 dates sous formes de chaines de caractères ("YYYYMMJJHHMMSSsss"), tu peux t'en inspirer :

    Code C : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    double CompareDates ( char *Reference, char *DateToCompare )
    {
      int    i, Longueur ;
      double d ;
     
      Longueur = strlen(DateToCompare);
     
      /* 
         Note : strcmp gives a number positive or negative depending on
                the sign of the difference, but is does not give a clue
    	    on from how much the 2 strings differ. This is a (very)
    	    rough estimate rouding the difference as counted as a 
    	    power of 10 to the end ot the string (thus a difference
                of 1->9 in the second-before last digit or letter
                translate to a difference of 1000 !!! 
     
                example : the difference between     19990609173031000 
    	                                 and     19990609173035000
     
                                           gives     1000 which in this
                                                     case is of the order
                                                     of magnitude of the second.
     
    		      A difference of 1 would be of the order of 
    		      magnitude of a milli-second. A difference
    		      of 1.e+05 would be of the order of magnitude
    		      of 1 minute, a difference of 1.e+06 would be
    		      of the order of magnitude of 10 minutes.
      */
     
     
      d = 0.0 ;
      for ( i = 0 ; i < Longueur ; i++ )
        if ( (int)DateToCompare[i] != (int)Reference[i] )
          {
    	d = pow(10.0,(double)(16 - i)) ;
     
    	d = d * (double)((int)DateToCompare[i] - (int)Reference[i]) ;
     
     
    	break ;
          }
     
      return (d);
    }
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Novembre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2009
    Messages : 26
    Points : 22
    Points
    22
    Par défaut
    Merci souviron34

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/07/2015, 09h28
  2. Réponses: 19
    Dernier message: 11/06/2008, 14h58
  3. Comparaison de 2 str
    Par twizell dans le forum C
    Réponses: 12
    Dernier message: 03/09/2003, 16h11
  4. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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