Page 1 sur 1

Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 15:57
par rkondour
Bonjour je recherche de l'aide pour creer une fonction php qui extrait le mots d'une chaine 1 pour les comparer avec les mots d'une chaine 2..

en detail je voudrais je voudrais comparer les mots cles du titre de l'article avec tous les autres titres d'articles du site,

j'ai pas mal cherché du coté des fonctions php telles que similar_text, levenshtein etc.. fais des test... mais je n'ai pas reellement reussi a creer de reels matchs entre les 2 titres.

ce que j'aimerais avoir ex :

Code : Tout sélectionner

$chaine1 = $le_titre_de_l_article; $articles = new SimpleXMLElement(monfichier, null, true); foreach( $articles as $article ){ $chaine2 = $article->title; if (si chaine2 contient au moins 3 mots de chaine1) { echo 'la chaine2 contient les mots cles'; else { echo 'la chaine2 ne contient pas les mots cles'; } }
Donc si une ame charitable peut me conseiller ce serai cool... merci

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 16:33
par or 1
http://php.net/manual/fr/function.explode.php
puis
http://php.net/manual/fr/function.array-intersect.php

après, il faudra pour avoir de meilleurs résultats ne pas compter certains mots trop courts et courants.

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 17:07
par rkondour
Salut merci pour ta reponse,
Hier j'ai passé ma soirée a chercher et en effet je j'envisagai de commencer par effectuer un explode du titre (apres l'avoir passé dans une regex pour supprimer tout ce qui est inutile...)

commencer par un explode :

Code : Tout sélectionner

$titre1 = explode(' ', 'le titre1 de mon article'); $titre2 = explode(' ', 'le titre2 de mon article');
et ensuite on compare :

Code : Tout sélectionner

$titre1 = array("a" => "le", "titre1", "de", "mon"); $titre2 = array("b" => "le", "titre2", "de", "mon"); $result = array_intersect($titre1, $titre2); print_r($result);
je ne connaissais pas array_intersect je pense que ta vraiment trouvé ce qu'il me faut... mais je n'arrive pas a savoir comment m'y prendre pour commencer la fonction... comment tu debuterais toi??
merci

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 17:10
par or 1
if(sizeof(array_intersect(explode(' ', $titre1), explode(' ', $titre2))) > 2){

}

et l'on peut y ajouter http://php.net/manual/fr/function.array-diff.php pour enlever certains mots.

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 17:27
par rkondour
cooll merci mais je t'avoue que sais pas trop comment m'y prendre pour afficher le resultat lol

Code : Tout sélectionner

// les variables // les variables $titre1 = 'le titre1 de mon article un'; $titre2 = 'le titre2 de mon article deux'; /la condition if(sizeof(array_intersect(explode(' ', $titre1), explode(' ', $titre2))) > 2){ // je fais comment pour afficher l'article ici. un echo $titre2; m'affiche simplement la variable 2 }

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 17:49
par Spols
Ne serait il pas plus interessant d'indexer tous les mots de tes titres et de faire une recherche (avec cache eventuellement) sur cet index ?
sinon cela pourrait représenter une lourde charge à chaque affichage.

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 18:14
par rkondour
oui c'est clair a l'affichage de chaque articles la fonction dois verifier les match du titre1 avec tous les autres titres.. mais les visiteurs recoivent une page mise en cache effectuée par une tache cron donc en effet le server va bosser dur pendant le cron mais le visiteur ne verra pas la difference.

en ce qui concerne mon code j'ai ceci :

Code : Tout sélectionner

$titre1 = 'le titre1 de mon article un'; $titre2 = 'le titre2 de mon article deux'; $str1 = explode(' ', $titre1); $str2 = explode(' ', $titre2); $result = array_intersect($str1, $str2); print_r($result);
qui affiche ceci :

Code : Tout sélectionner

Array ( [0] => le [2] => de [3] => mon [4] => article )
moi je veut savoir comment faire pour valider est afficher l'article dans mon foreach ex :

Code : Tout sélectionner

$titre1 = 'le titre1 de mon article un'; $titre2 = 'le titre2 de mon article deux'; $str1 = explode(' ', $titre1); $str2 = explode(' ', $titre2); $result = array_intersect($str1, $str2); if (si contient au moins 3 mots cles) { // $titre2 contient au moin 3 mots cles else { // $titre2 ne contient p 3 mots cles }
merci

Re: Mots cles d'une chaine et comparer avec une autre

Posté : 28 févr. 2019, 19:35
par rkondour
du coup j'ai fini par trouvé en utilisant la fonction count pour ma condition donc merci et merci aussi pour la fonction array_intersec qui ma beaucoup aidé!