Bonjour à tous,
But : Je cherche à faire des regroupements de termes (mots, ou ensemble de mots) suivant leur ressemblance.
Mon problème n'est pas dans le calcul de ressemblance mais plutôt dans les deux boucles que j'effectue et qui à mon avis n'optimise pas du tout mon programme.
Hyp :
- un terme peut avoir plusieurs équivalents
- un équivalent peut se retrouver dans plusieurs groupes
J'utilise une liste d'objet, chaque objet est défini de la manière suivante :
List_KW = TList;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 KW = TObject Name : chaine; // Nom du terme Code : chaine; // Codification du terme (algo soundex) lKWEq : Liste de KWEq; // Liste des termes équivalents end; KWEq = TObject Name : chaine; // Nom du terme équivalent; Code : chaine; // Codification du terme equivalent (algo soudex aussi) end;
Et voici maintenant comment je fais mes boucles, (je n'ai pas mis la création des objets dans les boucles pour éclaircir le code) :
Une première Pass, qui n'est pas montrée ici, calcul les codes de chaque termes.
Mais voilà, c'est :
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 For i := 0 to List_KW-1 do Begin oKW:=List_KW[i]; For j:=0 to List_KW-1 do Begin pKW:=List_KW[j]; IF oKW.Code = pKW.Code then Begin eqKW.Name:=pKW.Name; eqKW.Code:=pKW.code; oKW.lKWEq.Add(eqKW); End; End; End;
1. Assez long en temps de traitement
2. Il y a de la redondance dans les résultats, c'est à dire que je retrouve plusieurs groupes ayant les mêmes équivalents (normal quoi , au vu de ma boucle)
Avez vous des conseils à me donner, ou même mieux une solution moins coûteuse en temps d'exécution.
D'avance merci à tous pour vos conseils,
Amicalement,
Bruno
Partager