| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
SnAKes WRInaute discret

Inscrit le: 21 Mai 2004 Messages: 56 Localisation: Londres
|
Posté le : Ven Aoû 05, 2005 16:32 Sujet du message: Générer les keywords à la volée |
|
|
Avec la bufferisation des sorties, PHP permet de faire un prétraitement de la page avant l'envoi au navigateur. On peut par exemple généré à la volée les paramètres alt et title de tous les tags <img> dans la page.
Ici je vous propose mon script que j'utilise pour générer les mots clefs d'une page.
| Code: |
setlocale(LC_CTYPE, 'fr_FR');
// bufferization des sorties text afin de pouvoir faire un prétraitement
// avant d'envoyer au navigateur
ob_start("my_ob_handler");
function unaccent($text) {
$trans = get_html_translation_table(HTML_ENTITIES); //Get the entities table into an array
foreach ($trans as $literal => $entity) { // Create two arrays, for accented and unaccented forms
if (ord($literal) >= 192) { // Don't contemplate other characters such as fractions, quotes etc
$replace[] = substr($entity, 1, 1); //Get 'E' from string '&Eaccute' etc.
$search[] = $literal;
}
} //Get accented form of the letter
return str_replace($search, $replace, $text);
}
// Extrait du corps de la page HTML générée tous les mots et couple de mots distinct
// puis trie la list en mettant en haut les mots et couple de mots les plus fréquents
function getWords($string, $weight=3) {
// Petite astuce pour extraire les mots clefs des paramètres alt et title
$noTag = preg_replace("/alt=\"(.*?)\"/", "> \\1 <", $string);
$noTag = preg_replace("/title=\"(.*?)\"/", "> \\1 <", $noTag);
// Il faut rajouter un espace avant les < et > afin qu'une fois one élémine les
// tag les mots ne soient pas collés les uns aux autres la où il y avait le tag
$noTag = preg_replace('/</', ' <', $noTag);
$noTag = preg_replace('/>/', '> ', $noTag);
// On élimine les tags
$noTag = html_entity_decode(strip_tags($noTag));
// On vire les retours chariot, retours à la ligne et tabulation
$noTag = preg_replace('/[\n\r\t]/', ' ', $noTag);
$noTag = preg_replace('/ /', ' ', $noTag);
// On enlève les accents à toutes les lettres
$noTag = unaccent($noTag);
// On remplace tous les caractères non alphanumériques en espace
$noTag = eregi_replace("[^a-z0-9]", " ", $noTag);
// Minuscules
$noTag = strtolower($noTag);
// Mise en tableau de tous les mots de la page
$words = array();
$words = explode(" ", $noTag);
$uniqWords = array();
// Détection des mots distinct avec leur poids selon la fréquence
// d'apparition dans la page
foreach($words as $word) {
if(!empty($word)) $uniqWords[$word]++;
}
reset($words);
// Détection de couples de mots distincts avec poids
for($i = 0; $i < count($words); $i++) {
if(!empty($words[$i]) && !empty($words[$i + 1])) {
$coupleOfWords = $words[$i] . " " . $words[$i + 1];
$uniqWords[$coupleOfWords]++;
}
}
// Tri selon le poids
ksort($uniqWords);
// Génération des mots clefs selon leur poids
// On ne garde que les mots dont le poids et de minimum $weight
while(list($key, $val) = each($uniqWords)) {
if(strlen($key) > 2 && $val > $weight) {
$keywords .= $key . ", ";
}
}
return $keywords;
}
// Fonction callback pour la bufferisation
function my_ob_handler(&$buffer) {
// Génération des mots clefs
$keywords = getWords($buffer, 2);
// Remplacement de la chaine --KEYWORDS-- présente dans le template par les
// mots clefs générés.
$buffer = preg_replace("/--KEYWORDS--/", "$keywords", $buffer);
// Compression GZip
return ob_gzhandler($buffer, 5);
} |
Dans la page PHP qui génère le HTML, dans l'entete HTML on mettra
<meta name="keywords" value="--KEYWORDS--">
--KEYWORDS-- sera remplacé par les mots clefs.
Cette méthode n'est pas forcément la meilleur mais elle marche pour moi. |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
|
| |
|
 |
julio38 WRInaute occasionnel

Inscrit le: 19 Avr 2005 Messages: 124
|
Posté le : Ven Aoû 05, 2005 21:07 Sujet du message: Générer les keywords à la volée |
|
|
Rajouter une petite borne de nombre de keyword ne ferais pas de mal.
Générer 1000 mots clés (si la page à du contenu) ne sera pas forcément très apprécié par les moteurs de recherche  |
|
| |
|
 |
SnAKes WRInaute discret

Inscrit le: 21 Mai 2004 Messages: 56 Localisation: Londres
|
Posté le : Lun Aoû 08, 2005 15:40 Sujet du message: Générer les keywords à la volée |
|
|
| Code: |
setlocale(LC_CTYPE, 'fr_FR');
// bufferization des sorties text afin de pouvoir faire un prétraitement
// avant d'envoyer au navigateur
ob_start("my_ob_handler");
function unaccent($text) {
$trans = get_html_translation_table(HTML_ENTITIES); //Get the entities table into an array
foreach ($trans as $literal => $entity) { // Create two arrays, for accented and unaccented forms
if (ord($literal) >= 192) { // Don't contemplate other characters such as fractions, quotes etc
$replace[] = substr($entity, 1, 1); //Get 'E' from string '&Eaccute' etc.
$search[] = $literal;
}
} //Get accented form of the letter
return str_replace($search, $replace, $text);
}
// Extrait du corps de la page HTML générée tous les mots et couple de mots distinct
// puis trie la list en mettant en haut les mots et couple de mots les plus fréquents
function getWords($string, $weight=3,$maxwords=1000) {
// Petite astuce pour extraire les mots clefs des paramètres alt et title
$noTag = preg_replace("/alt=\"(.*?)\"/", "> \\1 <", $string);
$noTag = preg_replace("/title=\"(.*?)\"/", "> \\1 <", $noTag);
// Il faut rajouter un espace avant les < et > afin qu'une fois one élémine les
// tag les mots ne soient pas collés les uns aux autres la où il y avait le tag
$noTag = preg_replace('/</', ' <', $noTag);
$noTag = preg_replace('/>/', '> ', $noTag);
// On élimine les tags
$noTag = html_entity_decode(strip_tags($noTag));
// On vire les retours chariot, retours à la ligne et tabulation
$noTag = preg_replace('/[\n\r\t]/', ' ', $noTag);
$noTag = preg_replace('/ /', ' ', $noTag);
// On enlève les accents à toutes les lettres
$noTag = unaccent($noTag);
// On remplace tous les caractères non alphanumériques en espace
$noTag = eregi_replace("[^a-z0-9]", " ", $noTag);
// Minuscules
$noTag = strtolower($noTag);
// Mise en tableau de tous les mots de la page
$words = array();
$words = explode(" ", $noTag);
$uniqWords = array();
// Détection des mots distinct avec leur poids selon la fréquence
// d'apparition dans la page
foreach($words as $word) {
if(!empty($word)) $uniqWords[$word]++;
}
reset($words);
// Détection de couples de mots distincts avec poids
for($i = 0; $i < count($words); $i++) {
if(!empty($words[$i]) && !empty($words[$i + 1])) {
$coupleOfWords = $words[$i] . " " . $words[$i + 1];
$uniqWords[$coupleOfWords]++;
}
}
// Tri selon le poids
ksort($uniqWords);
// Génération des mots clefs selon leur poids
// On ne garde que les mots dont le poids et de minimum $weight
$count = 0;
while((list($key, $val) = each($uniqWords)) && ($count<$maxwords)) {
if(strlen($key) > 2 && $val > $weight) {
$keywords .= $key . ", ";
$count++;
}
}
return $keywords;
}
// Fonction callback pour la bufferisation
function my_ob_handler(&$buffer) {
// Génération des mots clefs
$keywords = getWords($buffer, 2);
// Remplacement de la chaine --KEYWORDS-- présente dans le template par les
// mots clefs générés.
$buffer = preg_replace("/--KEYWORDS--/", "$keywords", $buffer);
// Compression GZip
return ob_gzhandler($buffer, 5);
} |
|
|
| |
|
 |
Tilt WRInaute passionné

Inscrit le: 26 Mar 2005 Messages: 758
|
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|