Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 19 déc. 2019, 00:09

OK. Merci beaucoup @rthur

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par @rthur » 18 déc. 2019, 10:31

Chegmarco, on ne va pas le faire à ta place.
Donc vas-y, lance toi, développe !

Ça ne sert à rien de nous donner tout ton code actuel.
Quand tu as un message d'erreur précis revient vers nous.

Si tu ne sais pas par où commencer et bien commence par le CSV car c'est la solution la plus simple et qui a le plus de chance de fonctionner.

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 18 déc. 2019, 10:06

Bonjour et merci pour votre assistance.

Je préfère bien l'option de base "Usage Basic" car me permettra de comparer chacun des title entre eux, des keywords entre eux, des Descriptions entre elles et des Urls aussi entre eux en fonction des titles et description bien sûr .

Mais encore une fois, je ne sais pas comment m'y prendre sachant que mes données sont stockés chacun dans des variables: $titles, $description, $keywords et $url.

Voici le Code complet de mon scraper:

Code : Tout sélectionner

// This is our starting point. Change this to whatever URL you want. $start = ""; // Our 2 global arrays containing our links to be crawled. $already_crawled = array(); $crawling = array(); function get_details($url) { // The array that we pass to stream_context_create() to modify our User Agent. $options = array('http'=>array('method'=>"GET", 'headers'=>"User-Agent: Chegspider/0.1\n")); // Create the stream context. $context = stream_context_create($options); // Create a new instance of PHP's DOMDocument class. $doc = new DOMDocument(); // Use file_get_contents() to download the page, pass the output of file_get_contents() // to PHP's DOMDocument class. @$doc->loadHTML(@file_get_contents($url, false, $context)); // Create an array of all of the title tags. $title = $doc->getElementsByTagName("title"); // There should only be one <title> on each page, so our array should have only 1 element. $title = $title->item(0)->nodeValue; // Give $description and $keywords no value initially. We do this to prevent errors. $description = ""; $keywords = ""; // Create an array of all of the pages <meta> tags. There will probably be lots of these. $metas = $doc->getElementsByTagName("meta"); // Loop through all of the <meta> tags we find. for ($i = 0; $i < $metas->length; $i++) { $meta = $metas->item($i); // Get the description and the keywords. if (strtolower($meta->getAttribute("name")) == "description") $description = $meta->getAttribute("content"); if (strtolower($meta->getAttribute("name")) == "keywords") $keywords = $meta->getAttribute("content"); } // Return our JSON string containing the title, description, keywords and URL. return '{ "Title": "'.str_replace("\n", "", $title).'", "Description": "'.str_replace("\n", "", $description).'", "Keywords": "'.str_replace("\n", "", $keywords).'", "URL": "'.$url.'"},'; } function follow_links($url) { // Give our function access to our crawl arrays. global $already_crawled; global $crawling; // The array that we pass to stream_context_create() to modify our User Agent. $options = array('http'=>array('method'=>"GET", 'headers'=>"User-Agent: Chegspider/0.1\n")); // Create the stream context. $context = stream_context_create($options); // Create a new instance of PHP's DOMDocument class. $doc = new DOMDocument(); // Use file_get_contents() to download the page, pass the output of file_get_contents() // to PHP's DOMDocument class. @$doc->loadHTML(@file_get_contents($url, false, $context)); // Create an array of all of the links we find on the page. $linklist = $doc->getElementsByTagName("a"); // Loop through all of the links we find. foreach ($linklist as $link) { $l = $link->getAttribute("href"); // Process all of the links we find. This is covered in part 2 and part 3 of the video series. if (substr($l, 0, 1) == "/" && substr($l, 0, 2) != "//") { $l = parse_url($url)["scheme"]."://".parse_url($url)["host"].$l; } else if (substr($l, 0, 2) == "//") { $l = parse_url($url)["scheme"].":".$l; } else if (substr($l, 0, 2) == "./") { $l = parse_url($url)["scheme"]."://".parse_url($url)["host"].dirname(parse_url($url)["path"]).substr($l, 1); } else if (substr($l, 0, 1) == "#") { $l = parse_url($url)["scheme"]."://".parse_url($url)["host"].parse_url($url)["path"].$l; } else if (substr($l, 0, 3) == "../") { $l = parse_url($url)["scheme"]."://".parse_url($url)["host"]."/".$l; } else if (substr($l, 0, 11) == "javascript:") { continue; } else if (substr($l, 0, 5) != "https" && substr($l, 0, 4) != "http") { $l = parse_url($url)["scheme"]."://".parse_url($url)["host"]."/".$l; } // If the link isn't already in our crawl array add it, otherwise ignore it. if (!in_array($l, $already_crawled)) { $already_crawled[] = $l; $crawling[] = $l; // Output the page title, descriptions, keywords and URL. This output is // piped off to an external file using the command line. echo get_details($l)."\n"; } } // Remove an item from the array after we have crawled it. // This prevents infinitely crawling the same page. array_shift($crawling); // Follow each link in the crawling array. foreach ($crawling as $site) { follow_links($site); } } // Begin the crawling process by crawling the starting link first. follow_links($start);

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par @rthur » 18 déc. 2019, 00:42

L'autre méthode c'est de faire comme le script d'exemple "Basic Usage" de la page de la librairie :
https://github.com/paslandau/pagerank

Vu tes questions, tu ne sembles visiblement pas avoir les compétences pour le faire (ce n'est pas un reproche), voilà pourquoi je te recommande de passer par un fichier CSV, c'est plus simple car uniquement du traitement de chaines de caractères et c'est moins risqué car tu peux contrôler ton fichier CSV au milieu de ton traitement pour vérifier qu'il est conforme à ce qui est attendu.

Tu choisis quelle option ?

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 17 déc. 2019, 18:59

ok, merci.

Seulement que je me demande s'il n'y a pas autre alternative pour simplement parcourir les URLs et définir directement leur Score sans forcément passer par un Fichier .csv ????

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par @rthur » 17 déc. 2019, 18:31

Le plus simple c'est de transformer ton JSON en CSV.

Tu peux utiliser json_decode() pour charger ton contenu JSON en tant que variable PHP.
https://php.net/json_decode

Et ensuite tu reconstruis le CSV au format indiqué dans l'exemple de ta lib.


C'est impossible de te faire un exemple sans connaitre tes données, et de toute façon nous sommes ici sur un forum d'entraide donc je ne vais pas le développer à ta place, je te donne des pistes pour te débloquer, et c'est à toi d'essayer de le développer toi-même ensuite, c'est la meilleure façon d'apprendre :-D

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 17 déc. 2019, 13:22

Du coup le mieux c'est de repartir d'un des exemples fournis et une fois qu'il fonctionne avec tes données tu pourras l'adapter.

Par exemple, fait un fichier depuis les données de ton crawler au format CSV sous ce format :
https://github.com/paslandau/pagerank/b ... g-frog.csv

Et ensuite tu as ce script qui va le traiter pour faire le calcul :
https://github.com/paslandau/pagerank/b ... og-csv.php
Grand merci pour la réponse. Mais mon petit crawler fait un
return d'un json
.

Comment devrais-je donc par un petit exemple de votre part, lui appliquer l'algorithme vu que c'est un Json au lieu d'un fichier csv ????

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par @rthur » 17 déc. 2019, 12:49

Du coup le mieux c'est de repartir d'un des exemples fournis et une fois qu'il fonctionne avec tes données tu pourras l'adapter.

Par exemple, fait un fichier depuis les données de ton crawler au format CSV sous ce format :
https://github.com/paslandau/pagerank/b ... g-frog.csv

Et ensuite tu as ce script qui va le traiter pour faire le calcul :
https://github.com/paslandau/pagerank/b ... og-csv.php

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 17 déc. 2019, 08:18

Justement, je sais très bien puisque j'ai déjà moi même mon Propre Web Crawler basé sur Domdocument en PHP et dont les liens sont stockés après être crawlés dans la variable
$url
, tandis que les langues sont stockées dans la variable
$languageUrl
. Et je veux pouvoir leur donner des Scores Pagerank en fonction de la même langue. En clair, je veux pouvoir donner le Score Pagerank en fonction de la langue. J'ai déjà mon propre crawler. Je veux juste comprendre ce que le classement de pertinence Pagerankdonnerait à mon petit webcrawler.
Aidez moi donc s'il vous plaît.

Re: Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par @rthur » 17 déc. 2019, 01:22

Tu es sûr que la librairie que tu indiques fais bien ce que tu veux ???

Car il s'agit juste de l'implémentation mathématique de l'algorithme du papier de recherche initial qui a donné le PageRank.

Mais ce script ne crawl rien et ne va pas chercher les infos chez Google.
Tu fournis juste une liste de pages avec les liens entre elles (=un graph) et ça va te donner un résultat théorique (qu'ils appellent PageRank, mais en réalité qui n'est pas celui de Google) uniquement sur la base des quelques dizaines de pages que tu lui aura fourni.
Ça n'est absolument pas le PageRank de Google que tu vas récupérer avec cet algorithme.

Comment utiliser la Librairie PageRank pour définir le Score de Pertinence de chaque URL dans la même langue ???

par chegmarco » 16 déc. 2019, 19:10

Bonjour.

Je voulais utiliser la Librairie
Paslandau/Pagerank
(https://github.com/paslandau/pagerank) pour afficher le Score basé sur le Célèbre Algorithme Pagerank de Google de mes URLs en fonction des langues et la pertinences des URLs.
En clair, disons que j'ai des URLs qui ont les mêmes langues. Problèmes, les langues de ces URLs qui sont représentées par la variable $languagesURL sont écrites différemment avec le format
fr-FR
pour certains,
fr-CA
pour d'autres,
en-US
pour d'autres et
en-GB
pour certains, ou encore
en
simplement pour d'autres.

Alors, que la variable qui stocke les URLs est
$url
, je veux évaluer le Score PageRank de chacun des URLs en prenant seulement en compte les deux (2) Premiers Valeurs des langues (
en
) puisque c'est celle-ci qui définit vraiment la langue (anglais par exemple) des URLs à classer.

En parcourant le README de la Librairie
Paslandau/Pagerank
(https://github.com/paslandau/pagerank), j'ai vu ceci cet exemple, qui me semble intéressant :

Code : Tout sélectionner

To access the final PageRank values of each original node, use the `PageRankResult::getNodes()` method like so: ``````php /* Pseudocode. Well, kinda.. */ $round = 1; do{ $newPrs = []; // first, calculate the PR for all nodes foreach($nodes as $key => $node){ $newPr = $node->calculatePagerank(); // get linking nodes and their current PR values and calculate the PR $newPrs[$key] = $newPr; // cache the new PR } // second foreach($nodes as $key => $node){ $node->setOldPr($node->getCurrentPr()); // set current PR as "old" $node->setCurrentPr($newPrs[$key]); // get newly calculated PR and set as "current" } // yey, next round $round++; }while($difference > $threshold); ``` ```
Mais mon Problème est que je ne sais pas comment l'utiliser pour l'adapter à mon projet de sorte à obtenir à chacun boucle (
do ... while
) le Score de Chaque URL ($url) en fonction de chaque langue ($languagesUrl) sans oublier chaque URL a son format de langue (fr-FR, fr-CA, fr, en-US, en-GB, etc...).

Aidez-moi s'il vous plaît à définir en boucle le Score de chaque URL de la Même Langue. Les Scores PageRank de chacun des URLs doivent se faire seulement entre URL de la même langue (par exemple: comparer les URLs fr-FR, fr-CA, fr entre eux et les URLs en-US, en, en-GB entre eux).

Merci par avance.