Bonjour,

Je suis entrain de créer un petit moteur de recherche qui utilise java. Je veux avec java lors de la saisie d'un mot, aller chercher dans une liste si il est présent, et si il ne l'est pas, aller chercher le mot le plus proche.

J'ai donc mis en place l'algorithme de wagner et fisher, qui calcule le cout le plus faible entre deux mots, mais il n'est pas assez restricitifs, et j'aimerais qu'il privilégie des solutions par rapport à d'autres.

Exemple:

je rentre ilste

il me sort en cout identique:

ils
liste
reste
peste


Voici l'algorithme:

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
	private float testWagnerFisher(String mot1, String mot2) {
		int l1 = mot1.length(); // longueur mot1
		int l2 = mot2.length(); // longueur mot1
		float[][] distance = new float[l1 + 1][l2 + 1]; // Matrice de calcul des couts
		int i, j;
		int cout;
 
		// Initialisation ligne/colonne		
		for (i = 0; i <= l1; i++) {
			distance[i][0] = i;
		}
 
		for (j = 0; j <= l2; j++) {
			distance[0][j] = j;
		}
 
		//on remplit la matrice
		for (i = 1; i <= l1; i++) {
			for (j = 1; j <= l2; j++) {
				if (mot1.charAt(i - 1) == mot2.charAt(j - 1)) {
					//le caractere est identique
					cout = 0;
				} else {
					cout = 1;
				}
				distance[i][j] = Math.min(distance[i - 1][j - 1] + cout, Math
						.min(distance[i - 1][j] + 1, distance[i][j - 1] + 1));
			}
		}
		return distance[l1][l2];
	}
Si vous connaissez un moyen qui ne soit pas trop gourmand en complexité pour privilégier la sortie de liste par rapport à 'ils' et 'reste', je vous en serais très reconnaissant

Si besoin de plus d'explications, je vous les fournirais sans le moindre problème.