Détection automatique de mots clés dans un texte?

Nouveau WRInaute
Bonjour,

Je souhaiterais savoir s'il existe des mécanismes (PHP, MySQL...) permettant de récupérer automatiquement un certain nombre de mots clés dans un texte? Je voudrais pouvoir récupérer les mots importants, afin d'éventuellement les intégrer à un URL rewriting, ou de pouvoir relier des articles entre eux. Le faire manuellement me semble un énorme travail, surtout quand on dispose d'une grande base d'articles déjà existants.
Auriez vous une piste? Est-ce faisable de manière "simple"?
J'ai fait une recherche sur le forum mais je n'ai rien trouvé de concluant...
 
Nouveau WRInaute
Dans la base, ça resterait en interne. Ce serait par exemple le corps du texte d'un article. J'imagine qu'il faudrait éliminer les mots qui n'ont pas de valeur sémantique, et ensuite chercher les mots sur lesquels accentue le texte (qui apparaissent plusieurs fois par exemple)

Je sais que MySQL propose quelque chose qui ressemble à ça pour une recherche full-text par mot clé (il associe une valeur de pertinence à chaque mot) Donc en fait ça reviendrait un peu au même, mais sans préciser de mot clé de départ...
 
WRInaute occasionnel
Pour faire simple, tu peux faire :

Code:
$mot_cle = 'banjo';
$chaine = "J'ai un joli banjo en bois, que mon grand père m'a offert. J'aime beaucoup mon banjo";
$str = explode($mot_cle, $chaine);
$nbr_occurence = count($str) - 1;
echo 'Le mot clé "'. $mot_cle .'" est répété '. $nbr_occurence .' dans ma chaîne';

Tu défini le mot clé qui t'intéresse, et tu son nombre de répétition. Le mot clé le plus répété étant sûrement le plus important.
Après, tu devrais pas avoir trop de mal à te débrouiller pour les lier entre eux
 
WRInaute occasionnel
Sinon, fait rapidemment, si tu as ta chaîne, pour déterminer le mot clé :

Code:
$chaine="J'ai un joli banjo en bois, que mon grand père m'a offert. J'aime beaucoup mon banjo";
$tempo=strtr(
   $chaine,
   "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
   "abcdefghijklmnopqrstuvwxyz");
$tempo=str_replace("'"," ",trim($chaine));
$tempo=str_replace(",","",$tempo);
$tempo=str_replace(".","",$tempo);
$tempo=str_replace(" ;","",$tempo);
$tempo=str_replace(" :","",$tempo);
$tempo=str_replace(" !","",$tempo);
$tempo=str_replace(" ?","",$tempo);
$tabesp=explode(" ",$tempo);
echo "La chaîne «".$chaine."» contient les mots suivants :<br>";
for($i=0;$i<sizeof($tabesp);$i++)
{
$str = explode($tabesp[$i], $chaine);
$nbr_occurence = count($str) - 1;

echo "".($i+1)." : ".$tabesp[$i]." (". $nbr_occurence  .")<br />";
}

Bon c'est vraiment à améliorer, une regex serrait vraiment plus propre mais bon...
 
WRInaute occasionnel
Suivant l'exemple de maniagames, tu peux faire un preg_split qui te renvoies un tableau aussi. Tu peux ensuite faire un array_count_values pour chacun des mots récupérés comme ça tu connais le nombre d'occurences que tu as de chaque mot. Tu peux enlever les "le", "de", "des", "avec" et tout ce que tu juges inutile et du coup tu as les mots les plus utilisés (qui ne seront pas forcément les plus pertinents)... Sinon, tu peux à l'instar de google récupérer les mots en gras ou en italique et leur attribuer un poids plus important. Je sais pas si ça va pas charger le serveur mais je ne vois pas d'autres solutions.
 
Nouveau WRInaute
D'accord, c'est un peu ce que je pensais. En fait ce qui est un peu génant par cette méthode, c'est que la pertinence est jugée sur le nombre d'occurences du mot; ca ne devrait pas être le seul critère, c'est pourquoi je me demandais s'il existait quelque chose qui permette de le faire de manière plus fiable.
Mais je vais utiliser ça, et tester un peu ce que ça donne.

Je sais pas si ça va pas charger le serveur mais je ne vois pas d'autres solutions.
Ca ce n'est pas le problème, il suffirait de stocker les mots clés en base (associer une liste de mots clés à chaque article en base par exemple), c'est ce que je pense faire. D'autant plus que si le contenu du texte change, il y aurait un risque que la liste de mots clés change elle aussi. (plutôt embétant en cas d'url rewriting car risque de duplicate content je pense)
 
WRInaute accro
Mets toi à la place de l'internaute, que dirais tu de l'ergonomie d'un site où un mot sur 2 ou 3 serait avec un lien hypertexte (voire même souligné) ? en plus le problème de pertinence du aux homonymies, bof...
 
Nouveau WRInaute
Leonick -> Non, tu n'as pas compris, je n'avais pas l'intention de mettre les liens dans le texte lui même, plutôt en afficher une liste en dessous ou dans l'url. (de sorte de caractériser les articles et d'en trouver d'autres portants sur les mêmes thèmes)
Un peu comme ce qu'on trouve sur les articles de sites tels que pcinpact.
 
WRInaute accro
fait automatiquement, ça devient très vite n'importe quoi.
Quelle relation avec le même mot "carte" y a-t-il entre "carte mère", "carte google map" et "carte mémoire pour APN" ?
 
Nouveau WRInaute
Et c'est justement la raison de ce sujet : je demandais s'il existait des méthodes simples et fiables pour pouvoir faire ceci de manière automatique, et donc il apparait que non.
Quelle relation avec le même mot "carte" y a-t-il entre "carte mère", "carte google map" et "carte mémoire pour APN" ?
Eh bien à la limite, si le site concerné est basé sur un sujet bien précis, on rencontrerait moins ce problème. Mais c'est certain, c'est difficile pour un programme de juger de la valeur sémantique, bien que je pense que ça existe. (Google semble le faire, non?)
 
WRInaute accro
BigBook_ a dit:
Mais c'est certain, c'est difficile pour un programme de juger de la valeur sémantique, bien que je pense que ça existe. (Google semble le faire, non?)
il s'améliore beaucoup là dessus. Par exemple, quand on recherche "meuble de séjour" il n'affiche presque que des sites vraiment en rapport et pareil pour adsense.
Ce qui n'est pas le cas de MSN qui affiche des pub pour des voyages dans des meublés :lol:
Mais mon exemple était basé sur un sujet bien précis. Alors que si on prend "spa" on a aussi bien des matériels pour le bain que la S.P.A. :roll:
 
WRInaute occasionnel
Dans le cas de spa, je ne crois pas qu'il sera un jour capable de le discerner...

Disons qu'il pourrait mettre une sensibilité à la casse. Quand c'est en majuscule, c'est l'abréviation... La recherche en serait-elle plus pertinente pour tout le monde?
 
WRInaute occasionnel
Leonick a dit:
Mets toi à la place de l'internaute, que dirais tu de l'ergonomie d'un site où un mot sur 2 ou 3 serait avec un lien hypertexte (voire même souligné) ? en plus le problème de pertinence du aux homonymies, bof...

Je fermerais la fenêtre, croyant m'être trompé et avoir atterie sur Wikipedia 8) .

Sinon, il est toujours possible de faire des distinctions, il suffit de créer quelques règles en fonction du contenu.
Par exemple, on trouve sur la page le thèrme "spa", mais on ne sait pas à quoi il correspond. On peut chercher si il y a d'autres mots dans la page pouvant être associé. Si des mots tel que "thermal", "sauna", "eau bouillante" sont détéctés, alors on sait que SPA corresponds à du matériel de thalassotherapie.

C'est faisable, mais peut-être que le nombre de règles à mettre en place est trop important par rapport aux gains gagnés de le faire en manuel ?
Et si son site a une seule thématique (son site parle des animaux en général), il y a peu de chance que certains mots soient liés à d'autres sans rapport, vu que ça reste SES articles.

J'opterais pour une solution semi-automatique (les mots clés sont détéctés automatiquement, soumis à l'admin, qui valide ou les modifie manuellement).
 
WRInaute occasionnel
Pour spa, on parlait des moteurs de recherche... Dans ce cas là, impossible de savoir ce que veut l'utilisateur...
 
Nouveau WRInaute
Merci de vous y intéresser, en fait au départ c'était simplement une idée, ca pourrait s'appliquer à plusieurs sites mais je me posais la question de savoir si cette idée avait déjà été rencontrée ou non. Je pense que je ne suis pas le seul qui pourrait etre intéressé. (les gens aiment bien en général tout ce qui peut leur macher le travail de manière plus ou moins automatique :wink: )
Peut etre que quelqu'un pourrait développer quelque chose qui puisse s'appliquer à tout type de site ou thème (pas moi désolé, trop de travail! :lol:)
Donc tout ça pour dire que ce n'est pas une priorité pour moi mais simplement une idée d'évolution.

J'opterais pour une solution semi-automatique (les mots clés sont détéctés automatiquement, soumis à l'admin, qui valide ou les modifie manuellement).
Ca parait effectivement le mieux, de toute manière je suppose qu'il y a forcément besoin d'intervention humaine pour que l'on obtienne des résultats fiables.
 
Discussions similaires
Haut