PHP: analizzare ricorrenza parole chiave in contenuto testuale
16/11/2012La definizione delle parole chiave da inserire nei meta per aiutare il motore di ricerca nell'indicizzazione del contenuto di una pagina è spesso un momento critico.
Una delle regole da osservare, per quanto difficile e 'misteriosa' sia la materia, dice che le keywords indicate devono esser presenti nel contenuto testuale, ma non con una frequenza eccessiva per non esser classificate come 'inganno'.
Attraverso una funzione php possiamo effettuare l'analisi di un testo ed individuare quali e quante parole ricorrano maggiormente all'interno del testo stesso.
Nel chiamare la funzione, oltre a passare il testo da analizzare, definisco la lunghezza minima delle parole da analizzare e il numero minimo di occorrenze che mi interessa rilevare.
Nell'esempio riportato ricerco parole aventi almeno 8 caratteri e che ricorrano almeno 2 volte, e quindi otterrò il risultato:
fringilla (2 volte)
curabitur (2 volte)
suscipit (2 volte)
adipiscing (2 volte)
function extract_keywords($str, $minWordLen, $minWordOccurrences, $asArray = false)
{
function keyword_count_sort($first, $sec)
{
return $sec[1] - $first[1];
}
$str = preg_replace('/[^\p{L}0-9 ]/', ' ', $str);
$str = trim(preg_replace('/\s+/', ' ', $str));
$words = explode(' ', $str);
$keywords = array();
while(($c_word = array_shift($words)) !== null)
{
if(strlen($c_word) < $minWordLen) continue;
$c_word = strtolower($c_word);
if(array_key_exists($c_word, $keywords)) $keywords[$c_word][1]++;
else $keywords[$c_word] = array($c_word, 1);
}
usort($keywords, 'keyword_count_sort');
//print_r($keywords);
$final_keywords = array();
foreach($keywords as $keyword_det)
{
if($keyword_det[1] < $minWordOccurrences) break;
array_push($final_keywords, $keyword_det[0]. ' <em>(' . $keyword_det[1] . ' volte)</em>');
}
return $asArray ? $final_keywords : implode('<br />', $final_keywords );
}
$text = "
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Curabitur eget ipsum ut lorem laoreet porta a non libero.
Vivamus in tortor metus. Suspendisse potenti. Curabitur
metus nisi, adipiscing eget placerat suscipit, suscipit
vitae felis. Integer eu odio enim, sed dignissim lorem.
In fringilla molestie justo, vitae varius risus lacinia ac.
Nulla porttitor justo a lectus iaculis ut vestibulum magna
egestas. Ut sed purus et nibh cursus fringilla at id purus.
";
echo extract_keywords($text, 8, 2);