Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1526 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Moteur de recherche en perl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Moteur de recherche en perl

n°959925
shinux
Posté le 23-01-2005 à 14:47:46  profilanswer
 

Bonjour g conçue un petit moteur de recherche en perl.
Il fonctionne bien mais je voudrais lui a jouté une fonction de trie par pertinence et d'affichage sur plusireur page.
 
Mais seulement je ne sais pas comment faire (je sais qu'il faut des regxp mais on est faché)
 
Voici le code source :
 

Code :
  1. #!/usr/bin/perl
  2. $mailCmd = '/usr/sbin/sendmail';
  3. $fic="base.dat";
  4. $password="password"; 
  5. $page = "resultat.html";
  6. $maxresult=100;
  7. $maxcar=250;
  8. $rubrique = "rubrique.html";
  9. $message = "message.html";
  10. $myMail = "vodevil\@wanadoo.fr";
  11. $merci ="Merci d'avoir pris le temps de vous inscrire";
  12. $target= "_blank";
  13. $image='';
  14. ########################################################################
  15. $i=0;
  16. read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
  17. if ($ENV{'QUERY_STRING'})
  18. {$buffer = "$buffer\&$ENV{'QUERY_STRING'}";}
  19. @pairs = split(/&/,$buffer);
  20. foreach $pair (@pairs){
  21.       ($name,$value) = split(/=/,$pair);
  22.       $value =~ s/%(..)/pack("c",hex($1))/ge;
  23.       $value =~ s/\+/ /g;
  24. $VALUE{$name} = $value;
  25.       $Form{$name} .= "\0" if (defined($Form{$name}));
  26.       $Form{$name} .= "$value";
  27. }
  28. if (defined $Form{'recherche'}) { &recherche; exit; }
  29. if (defined $Form{'inscription'}) { &inscription; exit; }
  30. if (defined $Form{'suppression'}) { &supprimer; exit; }
  31. &rubrique;
  32. ########################################################################
  33. # Recherche par mot clés
  34. ##############
  35. sub recherche
  36. {
  37. open(INF, "$fic" ); @entries = <INF>; close(INF); $count = @entries;
  38. $mc = "$Form{'mc'}";
  39. if (!$mc) { &erreur ("ERREUR<BR><BR>Vous n'avez pas donné de mots clefs" ); }
  40. elsif (length $mc <2) { &erreur ("ERREUR<BR><BR>Votre recherche n'est pas valide" ); }
  41. elsif (length $mc <3) { &erreur ("ERREUR<BR><BR>Votre recherche n'est pas assez precise" ); }
  42. elsif (length $mc >30) { &erreur ("ERREUR<BR><BR>Vous avez tapé trop de mots clés" ); }
  43. $mc =~ s/^\s+//;
  44. $mc =~ s/\s+$//;
  45. @mc = split(/ /, $mc);
  46. open (fic, "$fic" ) || &erreur ("ERREUR<BR><BR>erreur de lecture du fichier $fic : $!" );
  47. foreach $ligne (<fic> )
  48. {
  49.   foreach $mc (@mc) { unless ($ligne =~ /$mc/i) {goto ap265; } }
  50.   $i++;
  51.   ($titre[$i],$url[$i],$descr[$i],$rub[$i],$mail[$i],$date[$i]) = split (/\|/, $ligne);
  52.   ap265:
  53. }
  54. if ($i >$maxresult) { $txt.= "Il y a trop de résultat à votre recherche. Veuillez la reformuler.</font></P>\n"; }
  55. else {
  56. foreach $i (1..$i) { $txt.= "<p>$image$i. <A Href=$url[$i] target=$target>$titre[$i]</A><br><BR><font size=-1>$descr[$i]<br><I>Rubrique : $rub[$i] [$date[$i]]</I></font></P>\n"; }
  57.      }               
  58. if (!$txt) { $txt.= "<center>Il n'y a pas de résultat à votre recherche</center>\n"; }
  59. $ouvrir=$page;
  60. &template;
  61. exit;
  62. }
  63. ########################################################################
  64. # Recherche par rubrique
  65. ##############
  66. sub rubrique
  67. {
  68. @mc = $Form{'rubrique'};
  69. if (!$Form{'rubrique'}) { &erreur ("ERREUR<BR><BR>Votre demande est invalide" ); }
  70. open (fic, "$fic" ) || &erreur ("ERREUR<BR><BR>erreur de lecture du fichier $fic : $!" );
  71. foreach $ligne (<fic> )
  72. {
  73. foreach $mc (@mc)
  74.    {
  75.     ($titre,$url,$descr,$rub,$mail,$date) = split (/\|/, $ligne);
  76.     unless ("$rub" =~ /$mc/i) {goto ap265; }
  77.    }
  78.   $i++;
  79.   ($titre[$i],$url[$i],$descr[$i],$rub[$i],$mail[$i],$date[$i]) = split (/\|/, $ligne);
  80.   ap265:
  81. }
  82. foreach $i (1..$i) { $txt.= "<p>$image$i. <A Href=$url[$i] target=$target>$titre[$i]</A><br><BR><font size=-1>$descr[$i]<br><I>$url[$i] [$date[$i]]</I></font></P>\n"; }
  83. if (!$txt) { $txt.= "<center>Il n'y a pas de lien dans cette rubrique.</center>\n"; }
  84. $ouvrir=$rubrique;
  85. &template;
  86. exit;
  87. }


 
 
 
Si quelqu'un sait comment faire ======> vodevil@hotmail.fr
 
Merci!    :fou:  :o  :bounce:

mood
Publicité
Posté le 23-01-2005 à 14:47:46  profilanswer
 

n°961659
pospos
Posté le 25-01-2005 à 10:47:14  profilanswer
 

shinux a écrit :

Si quelqu'un sait comment faire ======> vodevil@hotmail.fr


on est sur un forum ici...
 
Ton code est assez "crade": pas de "use strict", des goto partout, des appels de fonctions avec des &.... on dirait du perl 4!
 
Sinon a par ca ta recherce n'est pas tres efficace: si j'ai bien dechiffré tu parcours le fichier à la recherche des mots de la requetes, ca n'est pas tres "scalable" et risque rapidement de devenir super lent (surtout sur un serveur mutualisé).
Ce qu'il faut faire c'est indexer tes document, puis rechercher dans l'index au moment des requetes (et evidement réindexer tes document des qu'il changent). tu peux voir l'index comme une sorte de table de hash qui pour chaque mots pointera les documents qui le contiennent.
Regarde plutot du coté de vrais moteur d'indexation comme Swish (http://swish-e.org/) qui a une interface tres bien faite en perl: SWISH::API (http://swish-e.org/current/docs/API.html) (attention cette API la n'est pas sur CPAN, sur CPAN on ne trouve qu'une ancienne version peu efficace). Tu trouvera ensuite sur CPAN plein de modules pour présenter les resultats (context highlighting, templates, etc...).
Tu peux aussi regarder du coté de Plucene (lucene en Perl) ou Xapian.
 
bonne continuation
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Moteur de recherche en perl

 

Sujets relatifs
Recherche par date sur Oracle 10g.Recherche Envoie mail par Formulaire Sans php
[Perl] extraction de chaineRecherche un bon script pour chat php
Recherche de graphiste(s) pour un RPG VB/DirectX !Recherche lien vers le topic des meilleurs sites.
frames et moteurs de rechercheRecherche d'une séquence particulière
recherche d'une fonction[Perl] Comment vérifier si un nombre est entier ?
Plus de sujets relatifs à : Moteur de recherche en perl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR