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

  FORUM HardWare.fr
  Programmation
  PHP

  Indexer une page html

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Indexer une page html

n°1613862
Odissine
Posté le 21-09-2007 à 14:53:57  profilanswer
 

Bonjour à tous,
VOilà je suis confronter à un problème que je n'arrive pas a résoudre...
Je dois mettre dans une base de donné le contenu d'une page HTML afin d'utiliser son contenu comme mots clés pour mon moteur de recherche ?
j'utilise les commandes suivantes :

Code :
  1. $handle = @fopen("./dossier/fichier.htm", "r" );
  2. if ($handle)
  3. {
  4.     while (!feof($handle))
  5.     {
  6.       $buffer = fgets($handle, 4096);
  7.       //echo $buffer;
  8.       $indexation .= strip_tags($buffer);
  9.     }
  10.     fclose($handle);
  11. }
  12. $word = explode(" ",$indexation);


Seulement voilà, je voulais ne récuprer que les mots de plus de 3 caractères donc j'ai rajouté cette commande :
 
if (strlen($word[$i]) > 4) ... blabla
 
Et je m'aperçois qu'en plus de tout ca il m'affiche bcp de chose inutile comme des caractères spéciaux ... et des chiffres ...
 
Existe-t-il un moyen simple de ne récuprer que les mots de > 3 caractères et de ne pas prendre les signes speciaux et chiffres ...
 
Merci de votre aide.

mood
Publicité
Posté le 21-09-2007 à 14:53:57  profilanswer
 

n°1613906
leflos5
On est ou on est pas :)
Posté le 21-09-2007 à 16:01:19  profilanswer
 

Les signes spéciaux comme tu dis, c'est surement les caractères autres que a à z sans les accents qui sont encodés correctement avec les codes html de ces entités.
 
Faut les traduire à la volée pour avoir la version lisible par toi même. Ou faire avec :spamafote:

n°1613975
edwoud
⭐ shériff de l'espace
Posté le 21-09-2007 à 18:43:11  profilanswer
 

Tu peux utiliser html_entity_decode() pour convertir les codes HTML en caractères 'normaux'.
 
Niveaux accents, il faut faire super attention à l'encodage de ce que tu vas parser, ça peut changer du tout au tout!
 
Tu peux aussi choisir de restreindre tout ce qui n'est pas lettres simples en autre chose, comme le dit leflos5

n°1613976
Odissine
Posté le 21-09-2007 à 18:46:55  profilanswer
 

J'ai trouve une solution mais bon...
DAns le test je fais  

Code :
  1. if (strlen($word[$i]) > 4 && !eregi("[:punct:]+[:digit:]",$word[i])) {

... j'incremente la valeur finale et donc je prend en compte le mot testé ...
Ca marche mais je connais pas trop bien cette commande eregi et je voudrais rajouter en test le fait que je ne souhaite pas non plus prendre les caractères ":<>/\@&-_..." Enfin en gros je ne veux que les caractères a-z c'est tout ;)
 
Merci d'avance

n°1613978
edwoud
⭐ shériff de l'espace
Posté le 21-09-2007 à 18:51:56  profilanswer
 

oups, j'avais pas bien vu déjà une GROSSE erreur dans ton code
 
Tu lis par bloc de 4ko et tu fais les traitements en direct. Donc si une balise commence avant la fin des 4ko et termine après, tu te bouffes plein de saloperies.
 
Il faut faire ton strip_tags une fois TOUT le fichier lu, ça devrait déjà calmer les choses (sans toutefois tout régler) ;)

n°1613991
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 21-09-2007 à 19:30:23  profilanswer
 

edwoud a écrit :

oups, j'avais pas bien vu déjà une GROSSE erreur dans ton code
 
Tu lis par bloc de 4ko et tu fais les traitements en direct. Donc si une balise commence avant la fin des 4ko et termine après, tu te bouffes plein de saloperies.
 
Il faut faire ton strip_tags une fois TOUT le fichier lu, ça devrait déjà calmer les choses (sans toutefois tout régler) ;)


Objection ! [:nahouto]
 
Voir la doc de fgets à ce sujet : http://fr3.php.net/fgets . Si une nouvelle ligne se présente avant la fin du buffer, cette nouvelle ligne est alors retournée. Il est vrai cependant que le plus propre reste un fgets($handle) sans longueur maximum.


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1613992
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 21-09-2007 à 19:31:52  profilanswer
 

Odissine a écrit :

J'ai trouve une solution mais bon...
DAns le test je fais  

Code :
  1. if (strlen($word[$i]) > 4 && !eregi("[:punct:]+[:digit:]",$word[i])) {

... j'incremente la valeur finale et donc je prend en compte le mot testé ...
Ca marche mais je connais pas trop bien cette commande eregi et je voudrais rajouter en test le fait que je ne souhaite pas non plus prendre les caractères ":<>/\@&-_..." Enfin en gros je ne veux que les caractères a-z c'est tout ;)
 
Merci d'avance


Pour des lettres de A à Z :
 
preg_match('#[a-z0-9]{0,}#i',$word[i]);


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1613999
edwoud
⭐ shériff de l'espace
Posté le 21-09-2007 à 19:54:31  profilanswer
 

WiiDS a écrit :


Objection ! [:nahouto]


 
Objection rejetée! On peut éclater ses balises sur plusieurs lignes ;)
 

Code :
  1. <img src="youplaboum.jpg"
  2. alt="youpi">


 

n°1614016
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 21-09-2007 à 20:59:22  profilanswer
 

edwoud a écrit :


 
Objection rejetée! On peut éclater ses balises sur plusieurs lignes ;)
 

Code :
  1. <img src="youplaboum.jpg"
  2. alt="youpi">


 


Objection ! [:nahouto]
 
Rien ne prouve qu'il aie éclaté ses balises sur plusieurs lignes [:thalis]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1614060
Odissine
Posté le 22-09-2007 à 01:44:57  profilanswer
 

Ok merci à tous mais je pense que ma demande n'est pas très claire ^^
 
Je me reprends:
J'ai des pages html (ou php) dans un repertoire (./procedures/), j'ai crée un menu qui affiche dans un menu déroulant la liste des documents présent dans le dit repertoire.
Ce que je souhaite c'est en choisissant un documents, ne recuperer dans son contenu QUE les mots de + de 4 caractères. ex :  
<html><head><body>Ceci est un test tout simple dans lequel je ne souhaite récuperer que les mots supérieurs à 4 caractères<br>1) c'est simple je pense<br>2) je sais pas comment faire autrement</body></head></html>
Dans ce petit bout de code, je ne voudrais récuperer que les mots, afin de les ajouter dans un base de données et les associer au fichier html en question. C'est à dire je ne veux que "ceci, tout, simple, dans, lequel, souhaite, récuperer, mots, supérieur, caractères,...
Ceci dans le but de faire un moteur de recherche avec les documents que j'ai indéxer avec cette méthode.
 
Existe-t-il un moyen simple et rapide pour faire cette "indexation" ? La fonction strip_tags($variable) permet de supprimer justement les balises HTML (ca ca marche) en revanche j'ai encore un problème avec les ponctuations du type { } < > ] [ - ... je ne voudrais vraiment que des chaines de caractères de 4 caract. ou plus.
 
Merci de votre aide.
 
Cordialement

mood
Publicité
Posté le 22-09-2007 à 01:44:57  profilanswer
 

n°1614061
Profil sup​primé
Posté le 22-09-2007 à 02:40:27  answer
 

avec ton exemple ca m'a pris une petite minute grand max...
tu t'es pas creusé la tête  
 
ps : le bbcode foire les backslashes : y en a un devant le w et le n dans le str_replace

Code :
  1. <?php
  2. $var = "<html><head><body>Ceci est un test tout simple dans lequel je ne souhaite récuperer que les mots supérieurs à 4 caractères<br>1) c'est simple je pense<br>2) je sais pas comment faire autrement</body></head></html>";
  3. //pour gérer correctement les retour de ligne
  4. $var = strip_tags(str_replace(array('<br>','<br />'),"n",$var));
  5. preg_match_all('#(w{4,}+)#',$var,$out);
  6. echo '<pre>';print_r($out[1]);echo '</pre>';
  7. ?>


Message édité par Profil supprimé le 22-09-2007 à 02:44:01
n°1614067
edwoud
⭐ shériff de l'espace
Posté le 22-09-2007 à 09:06:38  profilanswer
 

WiiDS a écrit :


Objection ! [:nahouto]
Rien ne prouve qu'il aie éclaté ses balises sur plusieurs lignes [:thalis]


 
Objection rejetée, quand on récupère un fichier HTML, il ne faut supposer de rien, sinon c'est la cata assurée! Et puis ce n'est pas propre. Quand bien même ce serait le cas actuellement, vu que c'est pour un moteur propriétaire de recherche. Si un jour il change la génération du fichier HTML, badaboum, tout part en vrille. Il faut programmer propre dès le début, ça ne coûte pas grand chose et ça ouvre à toutes les évolutions!

n°1614075
Odissine
Posté le 22-09-2007 à 11:07:53  profilanswer
 

Merci Spike, je vais tester tout ca Lundi.
Je me suis pris la tête mais malheureusement mes connaissances en PHP datent un peu et étant comme beaucoup autodidactent j'ai pris surement de mauvaise habitudes, ce qui m'explique aujourd'hui mon appel à l'aide ;)
 
Merci en tout cas à tous !


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

  Indexer une page html

 

Sujets relatifs
pb formulaire html recuperer données avc perl/cgi ou c++[VB6] : Supprimer le titre et numéro de page d'un fichier texte
Objets FORMS 2.0 différents en VBA et HTML ?Site flash : effet lors du passage d'une page à l'autre
Pannel d'administration pour editer les pages html et phpinclude dans une page html
Page d'accueil avec nom de serveur[JS] Appel fonction d'une autre page
enregistrer une partie d'une page sous forme d'image 
Plus de sujets relatifs à : Indexer une page html


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