Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2008, 13h15   #1
Membre du Club
 
Inscription : février 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 69
Points : 42
Points : 42
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
adiltyane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 13h29   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
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.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 13h32   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
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 :
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;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 13h39   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
Sinon tu peux également lire ce tuto, il te donnera des idées :
http://sqlpro.developpez.com/cours/indextextuelle/
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 14h01   #5
Membre du Club
 
Inscription : février 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 69
Points : 42
Points : 42
Merci de vos reponse je vais les tester et vous tenir aucourant
adiltyane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 14h15   #6
Membre du Club
 
Inscription : février 2007
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 69
Points : 42
Points : 42
EXCELLENT
la fonction répond parfaitement mon problème
je l'es testé elle marche parfaitement bien

encore merci je clôture ce poste
adiltyane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h09.


 
 
 
 
Partenaires

Hébergement Web