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 :

Concevoir un Dictionnaire [Levenshtein distance similarity] [Fait]


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut Concevoir un Dictionnaire [Levenshtein distance similarity]
    bonjour,
    je suis entrain de réaliser un module qui utilise deux tables,
    j'ai deux champs de type texte un dans la première table et un dans la deuxième.
    je doit comparer les deux champs des deux table de telle sorte que quand je fait ma recherche je trouve les valeurs les plus proche du premier.

    exemple :

    je fixe sur la table 1 --> champ 1 = PATRICE
    le résultat doit me chercher toutes les valeur qui sont dans le champs 1 la table 2 qui se rapproche de champs 1 de la table 1
    exemple --> PATRIC
    --> PATRIQUE
    --> PARTICES
    ces résultat ont une similitude la plus proche entre les caractère des deux champs.
    le but c'est de trouver dans la table 2 les clients qui peu être on a mal écrit leur nom et qui existe déjà dans la table 1.
    je sais pas si il y a une bibliothèques qui fait ça ou un package déjà conçus

    merci de votre aide

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Non y'a rien de ce genre de déjà fait.
    Tu as le SOUNDEX mais c'est pas top s'il y a plusieurs mots.

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    En fait, si je viens de retrouver un truc qui avait été posté (je ne m'en suis jamais servi).
    Un post doit exister avec ceci :Levenshtein distance similarity
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    CREATE OR REPLACE FUNCTION ld_sim 
    -- Levenshtein distance similarity  
       (p_source_string   IN VARCHAR2,  
     	p_target_string   IN VARCHAR2)  
       RETURN		     NUMBER  
       DETERMINISTIC  
    AS  
    	v_length_of_source    NUMBER := NVL(LENGTH (p_source_string), 0);
    	v_length_of_target    NUMBER := NVL(LENGTH (p_target_string), 0);
    	TYPE mytabtype IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
    	column_to_left	  MYTABTYPE;
    	current_column	  MYTABTYPE;
    	v_cost		     		NUMBER := 0;
     
    BEGIN 
        IF p_source_string = p_target_string 
    	THEN 
    	  	RETURN 100;
        ELSIF v_length_of_source = 0 AND v_length_of_target = 0 
    	THEN 
      	 	RETURN 100;
        ELSIF v_length_of_source = 0 
    	THEN 
      	 	RETURN 0;
        ELSIF v_length_of_target = 0 
    	THEN 
      		RETURN 0;
      END IF;
     
      FOR j IN 0 .. v_length_of_target 
    		LOOP 
    			column_to_left(j) := j;
    		END LOOP;
     
    		FOR i IN 1 .. v_length_of_source 
    		LOOP 
    			current_column(0) := i;
    			FOR j IN 1 .. v_length_of_target 
    			LOOP 
    				IF SUBSTR (p_source_string, i, 1) = SUBSTR (p_target_string, j, 1) 
    				THEN v_cost := 0;
    				ELSE v_cost := 1;
    				END IF;
    				current_column(j) := LEAST (current_column(j-1) + 1, 
    											column_to_left(j) + 1, 
    											column_to_left(j-1) + v_cost);
    			END LOOP;
    			FOR j IN 0 .. v_length_of_target  
    			LOOP 
    				column_to_left(j) := current_column(j);
    			END LOOP;
    		END LOOP;
     
        RETURN CEIL ((1 - (current_column(v_length_of_target) 
      		    / GREATEST (v_length_of_source, v_length_of_target))) 
      		   * 100);
     
    END ld_sim;

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Sinon tu peux également lire ce tuto, il te donnera des idées :
    http://sqlpro.developpez.com/cours/indextextuelle/

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Merci de vos reponse je vais les tester et vous tenir aucourant

  6. #6
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    EXCELLENT
    la fonction répond parfaitement mon problème
    je l'es testé elle marche parfaitement bien

    encore merci je clôture ce poste

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

Discussions similaires

  1. [Java] Distance de Levenshtein
    Par pseudocode dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/11/2014, 04h55
  2. Réponses: 0
    Dernier message: 18/02/2010, 05h49
  3. [Recherche Algo] Distance levenshtein
    Par Finidrigoler dans le forum Langage
    Réponses: 8
    Dernier message: 09/09/2009, 00h43
  4. Levenshtein Distance
    Par mourbare dans le forum Ada
    Réponses: 19
    Dernier message: 30/04/2008, 16h55
  5. distance de levenshtein
    Par freemasons dans le forum C++
    Réponses: 11
    Dernier message: 10/04/2008, 11h31

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