Moteur de recherche

flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 30 oct. 2006 à 09:43
cedriclomb Messages postés 275 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 27 avril 2010 - 2 nov. 2006 à 11:03
Bonjour,

j'ai un moteur de recherche assez simple sur mon intranet, mais j'ai un soucis au niveau des caractères spéciaux.
Par exemple, si en recherche je tape "securite" ou "sécurité" , ca ne me trouve rien car il faudrait que je tape "sécurité".
Comment faire en sorte que ces caractères spéciaux soient convertis lors de la recherche ou alors que ca prenne aussi en compte lorsqu'il n'y a pas d'accents..?

Merci d'avance!!

5 réponses

cedriclomb Messages postés 275 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 27 avril 2010 1
1 nov. 2006 à 22:13
Bonsoir,
Methode du $recherche=str_replace('é','&eacute',$recherche);
et apres SELECT .... sur le nouveau $recherche

L'idée efficace et de faire deux array $original et $remplace et ensuite
$recherche=str_replace($original,$remplace,$recherche);
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
2 nov. 2006 à 09:54
Salut, j'ai essayé de faire ceci, et ca ne fonctionne pas :

En plus, lorsque je recherche un mot, une fois en mettant les accents, et une fois sans, ca ne me donne pas la même chose au niveau de ma recherche, je ne comprends pas...

$caractere_special=array(
"à"=>"à",
"á"=>"á",
"â"=>"â",
"ã"=>"ã",
"ä"=>"ä",
"å"=>"å",
"æ"=>"æ",
"ç"=>"ç",
"è"=>"è",
"é"=>"é",
"ê"=>"ê",
"ë"=>"ë",
"î"=>"î",
"ï"=>"ï",
"ô"=>"ô",
"ö"=>"ö",
"ù"=>"ù",
"ú"=>"ú",
"û"=>"û",
"ü"=>"ü",
"&"=>"&",
);




foreach($caractere_special as $caractere_code=>$caractere_traduction){
$requete = str_replace("$caractere_code","$caractere_traduction",$requete);
 }
0
cedriclomb Messages postés 275 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 27 avril 2010 1
2 nov. 2006 à 10:11
Ca c'est parce que dans ta base de donnée tu a les accents et que les caracteres e et é sont differents
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
2 nov. 2006 à 10:52
Est ce qu'il y a moyen d'y faire quelque chose ou pas..?

En fait, c'est pas une bdd, tout est stocké dans un fichier txt crée via ce script :
Sinon, connaitrais tu un script de moteur de recherche style google simple a utiliser et mettre en place.

<?php
// ##################################################################################
// **********************************************************************************
// Paramètres de configuration du module d'indexation : nom du répertoire principal
// à parcourir (rappelons que ses sous-répertoires sont parcourus de façon automatique)
// et extension des fichiers à indexer.
// **********************************************************************************


// = == Localisation du répertoire principal à indexer ===
// Note : le nom du répertoire ne doit pas être refermé par un slash
// Entrez la valeur "." pour le répertoire courant, ".." pour le répertoire parent


$cheminRepertoire="..";


// Renseignement sur les types de fichiers à indexer 
// Note : Entrez ici les différents formats de fichiers à indexer, séparés par une virgule


$listeFormatsFichiers="htm,html,asp,aspx,php";


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




<html>
<head>
<title>Module d'indexation</title>
</head>


<?php


// ##################################################################################
// ****************************************************************************
//  Test de la valeurs $cheminRepertoire
//*****************************************************************************


// Test de l'existence du répertoire


if(!is_dir($cheminRepertoire)) {
  print("Erreur ! ".basename($cheminRepertoire)." n'est pas un répertoire.");
  exit;
}


// ****************************************************************************
//  Création du tableau $formatFichiers (stockant les valeurs des formats de
// fichiers à indexer)
//*****************************************************************************


// == === Définition de la liste des formats "interdits" (c.à.d. qui ne seront en aucun cas indexés) =====
// Note : les extensions doivent être séparées par un espace


$formatsInterdits=" php3 php4 ";


// Stockage des valeurs correspondant aux formats à indexer dans le tableau $formatFichiers[]
// Note : l'indice de ce tableau démarre à 0


$formatCourant=strtok($listeFormatsFichiers,",");


do {
  if(eregi(" ".$formatCourant." ",$formatsInterdits)) {
    print("Rappel : les fichiers de format $formatCourant ne peuvent pas être indexés.
\n");
    $formatCourant =strtok(",");
    continue;
  }
  else {
    $formatFichiers[]=".".$formatCourant;
    $formatCourant=strtok(",");
    continue;
  }
} while($formatCourant);


// *********************************************************************************
// Définition de la fonction "listeFichiers", qui stocke dans le tableau
// $tableauCorrespondances les chemins des fichiers trouvés dans le répertoire
// "$cheminRep" et ses sous-répertoires
// *********************************************************************************


function listeRecursiveFichiers($cheminRep,$extension) {


  global $tableauCorrespondances;
  static $formatsTraites;


  $idRep=opendir($cheminRep);


  while($objet=readdir($idRep)) {


    $formatObjet=strstr($objet,".");
    $cheminObjet=$cheminRep."/".$objet;


 // Liste des dossiers a ne pas lister
$TableOfExeptions = array('Statistiques', 'images', 'Administration', 'Moteur_recherche', 'Acces_securise', 'Scripts', 'fpdf', 'aspnet_client');


// Elimination des répertoires "." et ".."if ( ($objet '.') or ($objet '..') or in_array($objet, $TableOfExeptions)   )
    continue;


    // Stockage des objets correspondants dans le tableau "$tableauCorrespondances"
    if($formatObjet==$extension) {
      $tableauCorrespondances[]=$cheminObjet;
    }


    // Application de la fonction aux sous-répertoires
    if(is_dir($cheminObjet)) {
      listeRecursiveFichiers($cheminObjet,$extension);
    }
  }
  closedir($idRep);
}


// *********************************************************************************
// Récupération de la liste des fichiers à indexer, par application de la
// fonction "listefichiers" pour chaque format spécifié par l'utilisateur.
// L'ensemble des fichiers à indexer, tous formats confondus,  est stocké dans
// le tableau $listeXFichiers.
// *********************************************************************************
$nombreFormats=count($formatFichiers); // nombre de formats de fichiers à indexer


for($compt=0;$compt<$nombreFormats;$compt++) {
  listeRecursiveFichiers($cheminRepertoire,$formatFichiers[$compt]);
}


$listeXFichiers=$tableauCorrespondances;


// Note : l'indice du tableau $listeXFichiers commence à 0


// *********************************************************************************
// Affichage de la liste des fichiers à indexer
// *********************************************************************************


print("
La liste des fichiers à indexer est la suivante :

\n");


$nombreFichiersAIndexer=count($listeXFichiers);


for ($compt=0;$compt<$nombreFichiersAIndexer;$compt++) {
  print($compt." / ".$listeXFichiers[$compt]."
\n");
}


print("
\n");


// ****************************************************************************
// Création du fichier indexsite.dat et enregistrement de différentes valeurs :
//  - chemin du fichier indexé
//  - titre du document (s'il existe)
//  - description du document (à défaut les 150 premiers caractères)
//  - texte du document
// ****************************************************************************


$idFicIndex=fopen("indexsite.dat","w+");


// Ecriture d'un message d'avertissement sur la première ligne
 fputs($idFicIndex,"Fichier Index. Ne pas éditer ! \n");


// Indexation des différents fichiers stockés dans le tableau $listeXFichiers;


for($compt=0;$compt<count($listeXFichiers);$compt++) {


  $cheminFichierCandid=$listeXFichiers[$compt];
  if(!is_readable($cheminFichierCandid)) {
    continue;
  }
  $idFicCandid=fopen($cheminFichierCandid,"r");


  $titre="";
  $description="";
  $ligne="";
  $texte="";


  while(!feof($idFicCandid)) {


    // *********************************************************
    // ***** Traitement ligne à ligne du fichier à indexer *****
    // *********************************************************


    $ligne=fgets($idFicCandid,10000);


    // suppression des espaces insecables


    $ligne=str_replace("&nbsp;"," ",$ligne);
    $ligne=str_replace("&NBSP;"," ",$ligne);


    // suppression des espaces superflus (début et fin de chaine)


    $ligne=trim($ligne);


    // ajout d'un espace à la fin de certaines ligne 
    // ===  (contenant effectivement du texte à indexer)  ===


    if (ereg("^[^<>]+$",$ligne)
     or ereg(">[^<>]+<",$ligne)
     or ereg(">[^<>]+$",$ligne)
     or ereg("^[^<>]+<",$ligne)
      ) {
        $ligne=$ligne." ";
    }


    // ****************************************************************    // intégration de la nouvelle ligne dans le texte à indexer
    // ****************************************************************


    $texte=$texte.$ligne;


  }


  fclose($idFicCandid);


  // ***********************************************************************
  // ****** Récupération et traitement du texte stocké précédemment ******
  // ** Note : l'ensemble des données est stocké dans la variable $texte ***
  // ***********************************************************************


  // Elimination des antislashes éventuels


  $texte=stripslashes($texte);


  // Récupération du titre du document (s'il existe)


  if($testTitre=eregi("<title>(.*)</title>",$texte,$corresTitre)) {
    $titre=$corresTitre[1];
  }


  else {
    $titre="Document sans titre";
  }


  // Récupération de la description du document (si elle existe)
  // ===         et limitation du nombre de caractères à 150         ===


  $testMeta=eregi("name="description"[ ]*content="([^"]*)"",$texte,$corresDescript);


  if($testMeta) {
    $description=$corresDescript[1];
    $description=substr($description,0,150);
  }


  // Elimination des éventuelles portions de code correspondant à des scripts  // (ces portions ne sont pas très bien nettoyées par la fonction strip_tags)


  $texte=eregi_replace("<script.+/script>","",$texte);


  // Elimination des tags html


  $texte=strip_tags($texte);


  // limitation du volume indexé à 8000 caractères


  $texte=substr($texte,0,8000);


  // === Cas de figure où la description du document n'a pas pu être récupérée
  // dans le metatag : par défaut, la description reprend les 150 premiers
  // caractères du texte indexé ===


  if(!$testMeta) {
    $description=substr($texte,0,150);
  }


  // Nettoyage du texte de description avec insertion de points de suspension




  if(strlen($description)>140) {
    if($testFin1=ereg("(.*)[ ][^ ]*$",$description,$corresFin1)) {
      $description=$corresFin1[1];
      if($testFin2=ereg("(.*)[,;:.]$",$description,$corresFin2)) {
        $description=$corresFin2[1];
      }
    $description=$description."...";
    }
    else {
      $description=$description."...";
    }
  }


  // Ecriture dans le fichier index


  fputs($idFicIndex,$cheminFichierCandid."\n"); // écriture du chemin du fichier (ligne N)
  fputs($idFicIndex,$titre."\n");               // écriture du titre (ligne N+1)
  fputs($idFicIndex,$description."\n");         // écriture de la description (ligne N+2)
  fputs($idFicIndex,$texte."\n");               // écriture du texte à indexer (ligne N+3)


  // Affichage d'un message de confirmation


  print("$compt / Le fichier $cheminFichierCandid a bien été indexé
\n");
}


fclose($idFicIndex);


//**********************************************************************************
// Vérification du résultat de l'indexation
//**********************************************************************************


$tabFicIndVerif=file("indexsite.dat");
$nlignesEffectivementIndexees=(count($tabFicIndVerif)-1)/4;


print("
\n");


if($nlignesEffectivementIndexees==$nombreFichiersAIndexer) {
  print("L'indexation des fichiers contenus dans le répertoire "$cheminRepertoire" a atteint son terme et s'est déroulée correctement. \n");
  print("Pour effectuer une première recherche, cliquez ici.\n");
}


else {
  print("L'indexation des fichiers contenus dans le répertoire "$cheminRepertoire" n'a pas atteint son terme.
Ce problème est peut-être dû au nombre relativement important de fichiers à indexer. Afin de tous les englober dans le fichier indexsite.dat, vous devez recommencer l'opération d'indexation en ayant préalablement augmenté (si vous en avez la possibilité) la durée maximum d'exécution des scripts PHP, dans le fichier php.ini.");
}


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



</html>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cedriclomb Messages postés 275 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 27 avril 2010 1
2 nov. 2006 à 11:03
Voila moi pendant un temps j'ai utiliser ce moteur la pour mon site
http://www.commentcamarche.net/php/phpmoteur.php3

Pour les accents a ma connaissance c'est chaud a moins que de demander a ton fichiers de ne mettre aucun accent et dans ce cas tu recherches en remplacant é par e ...
0
Rejoignez-nous