Moteur de recherche

Contenu du snippet

ce code permet de faire une recherche dans un tableau, avec des mots clés

L'utilisateur entre les mots clés simplement sous forme d'une phrase, et l'ordre des mots ne compte pas.
Dans notre cas, la fonction répertorie une cellule seulement si elle contient TOUS les mots clés demandés

Source / Exemple :


// la fonction la plus basique, c'est de chercher un mot unique dans une phrase

function cherche_mot(mot,string){

        // la fonction toLowerCase permet de tout mettre en minuscules

	mot=mot.toLowerCase();
	string=string.toLowerCase();
	if(string.indexOf(mot) ne -1 )return(true)
	else return (false)
}

// plus loin, la fonction qui cherche plusieurs mots ( mis dans un tableau) dans une phrase

function cherche_groupe(groupe,string){
	i=0;
	while(groupe[i] ne undefined){
		if(not(cherche_mot(groupe[i],string)))return(false)
                //>>ce bout de code permet de fixer la règle arbitraire que tous les mots doivent etre trouvés
		i++;
	}
	return(true);
}

/*ensuite la fonction qui transforme une phrase en tableau de mots en séparant les espaces.
le fonctionnement: on lit chaque caractère de la phrase et on la colle dans une cellule du tabeau pour former petit à petit un mot, en passant à la cellule suivante après chaque espace */

function separe_mots(string){
	vide=false;

        /* cette variable est une sorte d'interrupteur qui permet de savoir si on est en train de lire un mot ou un espace
        car il se peut que l'utilisateur entre de longs espaces entre les mots */

	c=i=0;
	groupe=new Array();
	groupe[0]=new String;

        //>>chaque cellule commence par un mot vide à remplir petit à petit

	while((char=string.charAt(c)) ne ""){
		if(char eq " "){
			if(not(vide)){
                                //>>on est tombés sur un espace après avoir été sur un mot

				vide=true;
				i++;
				groupe[i]=new String;
                                //>>on crée une nouvelle cellule pour ne pas continuer à écrire dans le mot précédent
                        }
                        //>>sinon, on est tombés sur un espace après avoir vu un autre espace, donc on ne fait rien
		}else{
			if(vide)vide=false;
                        //>>on est tombés sur un mot après avoir vu un espace
			groupe[i]+=char
                        //>>dans tous les cas on colle la nouvelle lettre
		}
		c++;
	}
	return(groupe);
}

//enfin le moteur de recherche qui utilise les fonctions précédentes

function cherche(phrase,tableau){
        //>>on entre les mots clés, et le tableau est une variable

	t=0;
	r=0;
	trace("recherche de '"+phrase+"'");
	mots=separe_mots(phrase);
	while(tableau[t] ne undefined){
		if (cherche_groupe(mots,tableau[t])){
			trace ("\n resultat n°"+r+" : "+tableau[t]);
			r++;
		}
		t++;
	}
	trace("\n total :"+r);
	return(r);
}

// on fait un test avec par exemple une recherche dans les petites annonces d'un magasin

articles=new Array();
articles.push("arrivage de tee-shirts rouges de chez GoGoL design, à mettre en hiver parait-il");
articles.push("polos verts cette fois, toujours de chez GoGol design");
articles.push("Maintenant des gilets gris de chez Meilleur design, saut qu'on sait pas quoi en faire");
articles.push("Autre tee-shirt rouge, on dirait que c la monde, mé on c pa c de ki");

cherche("chez gogOl dESIgn",articles);

/*
a l'éxécution dans flash, on voit apparaitre:

    • Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: The class 'MetaArticle2' could not be loaded.
var es:MetaArticle2= genericModule.getInstance(); Total ActionScript Errors: 1 Reported Errors: 1
    • Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 9: String literal was not properly terminated
while(groupe[i] ne undefined){"ee AAHAHAHAHAAA non JE RIGOLE, alors le vrai résultat c'est: recherche de 'chez gogOl dESIgn' resultat n°1 : arrivage de tee-shirts rouges de chez GoGoL design, à mettre en hiver parait-il resultat n°2 : polos verts cette fois, toujours de chez GoGol design total :2
  • /
voilà voilà

Conclusion :


Alors, pour aller plus loin on pourrait afficher en premier lieu les résutats contenant les mots exacts dans l'ordre demandé, et de l'autre coté à ajouter les résultats contenant seulement quelques mots, etc...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.