Optimiser script resultats

Fermé
darkpoet Messages postés 1654 Date d'inscription jeudi 29 mai 2008 Statut Contributeur sécurité Dernière intervention 10 mars 2014 - 7 sept. 2009 à 10:31
Bonjour,

j' ai installer le moteur de recherche moteued sur mon site : http://general.changelog.free.fr/

le soucis est que la recherche doit etre prescise ,hors je suis obligé de mettre un * derriere pouravoir un resultat qui n' est pas toujours celui souhaiter .

ma question est ,peux t on ameliorer le script resultat pour avoir des reponses correct je met le script en esperant votre aide

merci

<?php
// #####################################################################################
// =============================================================================
// Moteur'Ed 1.0 - (c) 2001 Thierry Arsicaud (deltascripts@ifrance.com)
// =============================================================================
// *************************************************************************************
// Configuration des paramètres d'affichage des résultats.
// Les intitulés des pages correspondantes sont affichés dans un tableau, par groupe de
// n réponses (paramètre à spécifier)
// *************************************************************************************

// === Paramètres d'affichage du Tableau ===

$largeurTableau="95%"; // Largeur du Tableau
$NombreRepPages=10; // Nombre n d'intitulés de pages Web à afficher par pages de résultat
$NombreRepMax=200; // Nombre maximum de résultats à traiter par le moteur
$policeResultats="verdana"; // Police de caractères utilisée pour l'affichage des résultats
$couleurPoliceResultats="#000000"; // Couleur de la police de caractères utilisée pour l'affichage des résultats

// #####################################################################################
?>

<html>

<head>
<title>Moteur'Ed - Résultats de la recherche</title>
</head>

<body>

<!- inserez la première partie de votre code html ici ->
<html><head><meta
content="text/html; charset=ISO-8859-1"
http-equiv="content-type"><title></title></head><body
style="background-image: url(file:///C:/Users/isa/Desktop/dossier%20manu/page-web/images/barthomer.gif);">



<?php
// ####################################################################################
// *******************************************************************************
// Localisation de l'index dans lequel doit être effectuée la recherche
// *******************************************************************************

$fichierIndex="indexsite.dat";

// *******************************************************************************
// Liste des "mots vides", dont les valeurs ne doivent pas être prises en compte
// lors des recherches dans l'index
// *******************************************************************************

$motsVides=" and or et ou le la les un une du de des a à au aux son sa ses ne ni non sauf ce ces cet je tu il elle on nous vous ils elles etc mon ma ton ta vos se y en ";

// *******************************************************************************
// Affichage d'un message d'avertissement dans le cas où le site n'a pas encore
// été indexé
// *******************************************************************************

if(!file_exists("indexsite.dat")) {
print("Le site Web n'a pas encore été indexé : veuillez exécuter le <b>script d'indexation</b> avant d'effectuer votre première recherche.\n");
exit;
}

// *******************************************************************************
// Affichage d'un message d'avertissement dans le cas de figure où l'utilisateur
// a activé la recherche sans avoir préalablement saisi de requête ($requete est nul)
// *******************************************************************************

if(!$requete) {
print("<center>\n");
print("<font face=\"$policeResultats\" size=\"-1\" color=\"$couleurPoliceResultats\">\n");
print("Vous avez activé la recherche sans avoir préalablement saisi votre requête.<br>");
print("<a href=\"moteured.php\">Cliquez ici</a> pour effectuer une nouvelle recherche.<br>\n");
print("</font>\n");
print("</center>\n");
}

else {

// *******************************************************************************
// Cas de figure où l'utilisateur a bien saisi une requête
// *******************************************************************************

// *******************************************************************************
// Analyse de la requête et préparation de la recherche. La requête (entrée par
// l'utilisateur dans la valeur $requete) est décomposée en une série de mots clés,
// stockés dans les tableaux $expressions et $motsCles
// *******************************************************************************

// === Premier nettoyage de la requête formulée par l'utilisateur ===

$requete=trim(stripslashes($requete));

// ***************************************************
// === Extraction des expressions entre guillemets ===
// ***************************************************

$requete1=$requete;

$expressions[]="Liste des expressions";

while($testExpress=ereg("[\"]([^\"]+)[\"]",$requete1,$corresExpress)) {
$exp=$corresExpress[1];
$expressions[]=$exp;
$requete1=ereg_replace($corresExpress[0],"",$requete1);
}

$nombreExpressions=count($expressions)-1; // Nombre d'expressions à analyser

// ********************************
// === Extraction des mots-clés ===
// ********************************

// === Définition de la fonction netGuil,
// utilisée pour le nettoyage des termes
// isolés compris entre guillemets ===

function netGuil($term) {
if(ereg("^[\"]*([^\"]+)[\"]*$",$term,$corres)) {
$reps=$corres[1];
return $reps;
}
else {
return($term);
}
}

// === Stockage des valeurs dans le tableau $motsCles ===

$requete2=$requete;

$motsCles[]="Liste des mots-clés";

$mot=trim(stripslashes(strtok($requete2," ")));
if(!(ereg("[ ]".$mot."[ ]",$motsVides))) {
$motsCles[]=netGuil($mot);
}
while($mot=trim(stripslashes(strtok(" ")))) {
if($mot and (!(ereg("[ ]".$mot."[ ]",$motsVides)))) {
$motsCles[]=netGuil($mot);
}
}

$nombreMotsCles=count($motsCles)-1; // Nombre de mots-clés à analyser


// ************************************************************************************
// Ouverture du fichier indexsite.dat et stockage des lignes dans le tableau $contenuIndex
// ************************************************************************************

$contenuIndex=file($fichierIndex);

$nlignesIndex=count($contenuIndex);
$nombreDocumentsIndexes=($nlignesIndex-1)/4;

// ************************************************************************************
// Stockage des données dans les tableaux $cheminDocument, $titreDocument,
// $descriptionDocument, $texteDocument
// ************************************************************************************

for($compt=1;$compt<=$nombreDocumentsIndexes;$compt++) {
$cheminDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+1]));
$titreDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+2]));
$descriptionDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+3]));
$texteDocument[$compt]=trim(stripslashes($contenuIndex[(4*($compt-1))+4]));
}

// ***************************************************************************
// ========================================================
// === Lancement de la procédure d'évaluation des pages ===
// ========================================================
//
// Chaque page est passée en revue et se voit attribuer des points
// selon les règles suivantes :
//
// - 2 point si la requête (considérée comme expression) est présente dans le titre
// - 1 point si la requête (considérée comme expression) est présente dans le texte indexé
//
// - 2 point par expression présente dans le titre
// - 2 point par mot-clé présent dans le titre
//
// - 1 point par expression présente dans le texte indexé
// - 1 point par mot-clé présent dans le texte indexé
//
// Note : une ou plusieurs expressions présentes donnent naturellement un meilleur
// score à la page
//
// ***************************************************************************

// Les différents documents indexés spnt passés en revue et analysés

for($compt=1;$compt<=$nombreDocumentsIndexes;$compt++) {

$score[$compt]=0;

// === Recherche de la requête (considérée comme expression) dans le titre du document : 2 points
//if(eregi("(^|[ .,:;!?'()])".$requete."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

// === Recherche de la requête (considérée comme expression) dans le texte indexé : 1 points
if(eregi("(^|[ .,:;!?'()])".$requete."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;


for($a=1;$a<=$nombreExpressions;$a++) {
// ===== Recherche des expressions =====

// === Recherche de l'expression dans le titre du document : 2 points s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$expressions[$a]."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

// === Recherche de l'expression dans le texte indexé : 1 point s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$expressions[$a]."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

}

for($b=1;$b<=$nombreMotsCles;$b++) {
// ===== Recherche des mots-clés =====

if(eregi("([^*]*)[*]",$motsCles[$b],$corMotCle)) {

// l'utilisateur a fait suivre le mot-clé d'une astérisque (il faut donc étendre la recherche)

// === Recherche du mot-clé dans le titre du document : 2 points s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$corMotCle[1],$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

// === Recherche du mot-clé dans le texte indexé : 1 point s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$corMotCle[1],$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

}

else {
// le mot-clé ne comporte pas d'astérisque

// === Recherche du mot-clé dans le titre du document : 2 points s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$motsCles[$b]."([ .,:;!?'()]|$)",$titreDocument[$compt])) $score[$compt]=$score[$compt]+2;

// === Recherche du mot-clé dans le texte indexé : 1 point s'il y a correspondance
if(eregi("(^|[ .,:;!?'()])".$motsCles[$b]."([ .,:;!?'()]|$)",$texteDocument[$compt])) $score[$compt]=$score[$compt]+1;

}
}
}

// ************************************************************************************
// Tri des résultats en vue de leur affichage :
// Les pages seront affichées de la plus pertinente à la moins pertinente
// ************************************************************************************

// Détermination du score le plus élevé parmi toutes les pages analysées

$HiScore=max($score);


// TRI du tableau à l'aide de la fonction asort

arsort($score);

// Création du tableau $documentsCorrespondantsOrd
$documentsCorrespondantsOrd[]=0;

for(reset($score);$cle=key($score);next($score)) {
if(current($score)>0) {
$documentsCorrespondantsOrd[]=$cle;
}
}

$nombreCorrespondances=count($documentsCorrespondantsOrd)-1;


// ************************************************************************************
// Les résultats sont affichés dans un tableau, dont les caractéristiques ont été
// précisées en début de script.
// Note : les pages sont affichées dans l'ordre décroissant de leur pertinence
// ************************************************************************************

print("<table width=\"$largeurTableau\" border=\"0\" align=\"center\"> \n"); // Début du code pour l'affichage du tableau
print("<tr><td> \n");

if($nombreCorrespondances<1) {
print("<center> \n");
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("Désolé, aucune page ne correspond à la recherche : '<b>$requete</b>'. <br><br> \n");
print("</font> \n");
print("</center> \n");
}

else {
if(@ !$p) $p=1;

if($nombreCorrespondances==1) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("La requête '<b>$requete</b>' a donné <b>1</b> résultat. <br>\n");
print("</font> \n");
}

else {
if($nombreCorrespondances>=$NombreRepMax) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("La requête '<b>$requete</b>' a donné plus de $NombreRepMax résultats. <br>\n");
print("</font> \n");
$nombreCorrespondances=$NombreRepMax;
}

else {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("La requête '<b>$requete</b>' a donné <b>$nombreCorrespondances</b> résultats. <br>\n");
print("</font> \n");
}
}

print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("Liste des pages <b>".$p."</b> à <b>".(min(($p+$NombreRepPages-1),$nombreCorrespondances))."</b> :<br><br>");
print("</font> \n");



for($compt=$p;$compt<=min(($p+$NombreRepPages-1),$nombreCorrespondances);$compt++) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("<b>$compt</b>. <a href=\"".$cheminDocument[$documentsCorrespondantsOrd[$compt]]."\"><b>".$titreDocument[$documentsCorrespondantsOrd[$compt]]."</b></a><br> \n");
print($descriptionDocument[$documentsCorrespondantsOrd[$compt]]."<br><br> \n");
print("</font> \n");
}

print("<center> \n");

if(($p-$NombreRepPages)>0) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("<a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".($p-$NombreRepPages)."\"><< page précédente</a>   \n");
print("</font> \n");
}

if($nombreCorrespondances>$NombreRepPages) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
for($a=1;$a<=(floor(($nombreCorrespondances-1)/$NombreRepPages)+1);$a++) {
if((floor($p/$NombreRepPages)+1)==$a) {
print("$a   \n");
}
else {
@ print("<a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".(($a-1)*$NombreRepPages+1)."\">$a</a>   \n");
}
}
print("</font> \n");
}

if(($p+$NombreRepPages)<=$nombreCorrespondances) {
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
@ print("   <a href=\"resultats.php?requete=".rawurlencode($requete)."&p=".($p+$NombreRepPages)."\">page suivante >></a> \n");
print("</font> \n");
}

print("</center> \n");
}


// **************************************************************************
// Affichage du formulaire permettant d'effectuer une nouvelle recherche
// **************************************************************************

print("<form action=\"resultats.php\" method=\"post\"> \n");
print("<table align=\"center\"> \n");
print("<tr><td align=\"center\"> \n");
print("<font face=\"$policeResultats\" color=\"$couleurPoliceResultats\" size=\"-1\"> \n");
print("Effectuer une nouvelle recherche: <br> \n");
print("</font> \n");
print("</td></tr> \n");
print("<tr><td align=\"center\"> \n");
print("<input type=\"text\" name=\"requete\" size=\"20\"> \n");
print("   ");
print("<input type=\"submit\" value=\"Chercher\"> \n");

print("</td></tr> \n");
print("</table> \n");
print("</form> \n");

print("<center><font face=\"$policeResultats\" size=\"-2\" color=\"$couleurPoliceResultats\">Avec la complicité de <a href=\"http://www.echodelta.net/scriptsphp/moteured/\" target=\"_blank\">Moteur'Ed 1.0</a>, moteur de recherche interne en PHP.\n");

print("</td></tr> \n");
print("</table> \n");


// **************************************************************************
// Sauvegarde de la requête dans le fichier req.txt
// **************************************************************************

$idFiqReq=fopen("req.txt","a+");
fputs($idFiqReq,$requete."\n");
fclose($idFiqReq);
}

// ####################################################################################
?>

<!- inserez la seconde partie de votre code html ici ->
<br></body></html


</body>
</html>