TUTORIELS 

Cas pratique : un moteur de recherche en Php.
Première partie: Exemple d'indexation de contenu (4/4)
Dans cette nouvelle série de tutoriels nous nous proposons d'explorer les principes de bases d'un "moteur de recherche". Notre méthode sera basique mais nous l'espérons pédagogique. Ce sera également l'occasion d'apprendre ou de réviser bon nombre de fonctions Php.  (19 janvier 2002)
 

Pages 1 | 2 | 3 | 4

Avec :

$contenu = split_words($contenu);

... Nous obtenons donc un tableau de mots (dont le contenu pourrait être optimisé mais nous nous en tiendrons à cette version pour l'instant).

Puis :

$nb_mots = count($contenu);

... Nous renseigne sur le nombre de mots contenus dans le tableau. Nous pouvons désormais programmer un traitement pour chacun des mots.

Ce sera chose faite avec :

$contenu = array_count_values($contenu);

$host = "localhost";
$user = "root";
$pass = "";
$bdd = "jdn";

$idconnect= mysql_connect($host,$user,$pass) or die("Pb de connexion");
mysql_select_db("$bdd") or die("Pb de connexion");

while (list ($key, $val) = each ($contenu))
{
     echo ("$key => $val<br>");
     $req="insert into moteur (mot, poids, origine, titre_page) values ('$key', $val,      'origine', 'titre_page')";
     $idreq=mysql_query($req);
     if ($idreq == 0)
     {
          echo("Une erreur est survenue !<br>");
          mysql_close($idconnect);
          exit;
}

Nous utilisons ici tout d'abord la fonction array_count_values bien résumée ici par l'exemple donné par Php.net :

$array = array (1, "hello", 1, "world", "hello");
print_r(array_count_values ($array));

On obtient à l'affichage :
(
     [1] => 2
     [hello] => 2
     [world] => 1
)


C'est exactement ce que nous recherchons pour notre "moteur de recherche", une liste de mots suivi du nombre d'occurences.

A la suite de cette fonction on trouve un script de connexion basique pour se connecter en local via Easyphp sur notre base de données prenommée ici "jdn".

Le principe est ensuite d'extraire chaque couple de notre tableau généré par la fonction array_count_values. Nous utilisons les fonctions très puissantes each et list pour cette tâche. Nous ne gérons pas pour l'instant l'origine du mot et le titre de la page, pour lesquels nous insérons systématiquement la même chaîne de caractères.

Voici le script de création de la table "moteur"...

CREATE TABLE moteur (
id int(4) unsigned NOT NULL auto_increment,
mot varchar(100) NOT NULL default '',
poids mediumint(9) NOT NULL default '0',
origine varchar(255) NOT NULL default '',
titre_page varchar(255) NOT NULL default '',
PRIMARY KEY (id)
)


... et les quatre premiers affichages produits par notre script (utiles à des fin de debug par exemple) :

manipuler => 1
les => 13
cha&icirc;nes => 2
caract&egrave;res => 11

Parallèlement à cet affichage, les valeurs en question sont insérées dans la base. Ainsi, au mot "manipuler" correspond un poids de "1", pour "les", celui-ci se monte à 13 occurences.

Nous verrons entre autres dans le prochain tutoriel de cette série comment compléter notre table avec les champs "titre_page" et "origine".

Bien sûr d'autres approches existent sur le même thème, afin de patienter jusqu'au prochain tutoriel vous pouvez consulter la rubrique dédiée aux outils de recherche sur JDN Solutions, ou décortiquer ces scripts présents sur Phpinfo.net.

Pages 1 | 2 | 3 | 4

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page