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

PL/SQL Oracle Discussion :

coefficient de ressemblance


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut coefficient de ressemblance
    Bonjour,

    j'ai quelques petits soucis d'intégrations de données, et il me faudrait un moyen de récupérer un coefficient de ressemblance entre 2 chaînes.

    Je m'explique : j'ai un fichier excel de clients avec leur localité, cette localité est saisie à la main dans une interface de gestion commerciale, et lors de l'intégration dans la base oracle, ces localités ne correspondent pas toujours à celle de la table LOC(localité) d'oracle.

    exemple dans le fichier excel : j'ai une localité "ST AMAND" et dans la base la localité est de cette forme : "SAINT AMAND".

    J'espère avoir été assez clair

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Il y a bien la fonction SOUNDEX, mais ça ne fonctionne pas avec votre exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select soundex('ST AMAND'),soundex('SAINT AMAND') from dual
    Il n'y a pas de magie...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    A priori il n'existe pas de fonction de ce genre donc j'ai griffoné une petite fonction, avec une syntaxe pl/sql, mais soyez indulgent je viens de découvrir ce dernier :p

    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
    declare
      coef int;
      locali char(10); //sera un enregistrement de la base oracle
      ville char(10); //sera un élément du fichier excel
      caractere char;
      nbcharlocali int;
      nbchar int;
      i int;
    begin
      locali:='SAINT AMAND'; // juste des valeurs de test
      ville:='ST AMAND';
      nbcharlocali:=Length(locali);
      nbchar:=Length(ville);
      for i in 1..nbchar loop
          caractere:=substr(ville,i,1);
          if instr(locali, caractere) > 0 then 
              coef:=coef+1;
          end if;
      end loop;
      dbms_output.put_line(coef);
    end;
    En gros je garderai la valeur max de ce coef, et donc la localité qui parait la plus pertinente. hélàs...

    il me met une erreur sur mon "for", je vois pas trop en quoi il pose problème..
    erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ORA-06550: Ligne 16, colonne 40 :
    PLS-00103: Symbole "FOR" rencontré à la place d'un des symboles suivants :
     
       . ( ) * @ % & - + / at mod remainder rem  ||
       multiset
    Symbole "* inséré avant "FOR" pour continuer.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci, mais en effet ça ne fonctionne pas sur mon exemple.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Si la liste des ressemblances est connue, il est préférable de les lister pour les utiliser directement, de manière à avoir une équivalence entre "SAINT AMAND" et "ST AMAND", entre "CHAUNE SUR MARNE" et CHAUNE/MARNE" mais pas entre "SAINTELAT" et "STELAT". Dans un de mes stages dans une entreprise de cartographie, les noms étaient stockés dans la base avec toutes ces variations possibles. Cela augmentait le volume d'informations mais accélérait grandement la rapidité des requêtes.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    hum, ça pourrait être une solution, mais maintenant que j'ai commencé mon chti bout de code, j'aimerai bien l'exploiter (ralala quelle fierté ces développeurs )

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Le problème de ton petit bout de code est qu'il doit faire en sorte que "SAINT AMAND" et "ST AMAND" soient similaires, mais que "PARIS" et "PARVIS" ne se ressemblent pas alors même que le nombre de caractères différents est moindre. Sans stocker en dur les ressemblances à chercher il y aura forcément des effets de bords...

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    un coef/nbcharlocali peut être ? ça éviterai ce genre de soucis.

    En tout cas, la liste des localités sera limité par le code postal avant d'appeler la fonction. Après s'il reste plusieurs localité ce sera à l'utilisateur de choisir le bon, mais la liste sera toujours plus pertinente.

    Stocker les ressemblances en dur, d'une ça va être très long, et de deux ça risque de prendre vraiment beaucoup de place, la table des localités contient plus de 55000 enregistrements déjà...

    Sinon vous voyez comment corriger l'erreur ? car je patauge là

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    J'ai réussi à corriger l'erreur, pas grand chose comme d'habitude...

    Merci de votre aide en tout cas, j'espère ne pas avoir à revenir vous embêter

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Cette discussion référence l'algorithme de la distance de Levenhstein et peut être intéressant avec un exemple en PL/SQL.

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

Discussions similaires

  1. [Signal] coefficient de fourier !!!
    Par bessonnet dans le forum Traitement du signal
    Réponses: 7
    Dernier message: 19/12/2006, 14h37
  2. Quelle distribution ressemble le plus à Windows XP ?
    Par laloi dans le forum Distributions
    Réponses: 11
    Dernier message: 18/04/2005, 02h13
  3. Cherche un TColorListBox ressemblant plus à un TCheckListBox
    Par yoghisan dans le forum Composants VCL
    Réponses: 16
    Dernier message: 27/02/2005, 09h40
  4. Déterminer les coefficients moyens d'une équation linéaire
    Par Oliveuh dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/01/2005, 23h23
  5. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52

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