Discussion Utilisateur:Snark

Un article de Wikipédia, l'encyclopédie libre.

J'ai écrit un script en perl, qui étant donnée une page de wikipedia, trace un graphe des pages vers lesquelles elle pointe, à la profondeur voulue, avec en rouge les pages inexistantes.

La profondeur voulue, suivant les pages, ça peut être 1 seulement, parce que sinon vous êtes morts, et le serveur aussi. ;-)

Exemple d'utilisation:

  • perl wikipedia.graphe Mathématiques 1 2> erreur > resultat
  • dot -Tgif resultat > /tmp/result.gif
  • ensuite, ça se transforme bien en png pour avoir une taille plus raisonnable.

(perl c'est perl, et dot est dans le paquet graphviz chez debian); résultat:

Image:Result.png

Voici le script wikipedia.graphe: (si quelqu'un sait mieux le formater pour qu'il soit plus lisible...)

#!/bin/perl -w
use warnings;
use strict;
my ($root, $depth, %links, %nodes);
# $node{$page}= 1 if it exists, 2 if it doesn't
$#ARGV==1 || &usage;
$root=$ARGV[0];
$depth=$ARGV[1];
&graph($root, $depth);
&print_result;
exit(0);
###########################
#  Subroutines begin here #
###########################
sub usage
{
   print "wikipedia.graphe page profondeur\n";
   exit(1);
}
sub print_result
{
   my ($node, $begin,$end, $arrayref, %nodenumber, $number);
   print "digraph toto {\n";
   $number=0;
   foreach $node (keys %nodes)
   {

print "\"n$number\" [ label=\"$node\",";

print " URL=\"toto\",";

print "color="; if($nodes{$node}==1) { print "black"; } else { print "red"; }

print "];\n"; $nodenumber{$node}=$number; $number=$number+1;

   }
   while (($begin,$arrayref) = each %links)
   {

foreach $end (@$arrayref) { print "\"n$nodenumber{$begin}\" -> \"n$nodenumber{$end}\";\n"; }

   }
   
   print "}\n";
}
sub pretty
{
   my $name=$_[0];
   $name =~ s/%E4/a/g;
   $name =~ s/%E9/e/g;
   $name =~ s/%C9/E/g;
   $name =~ s/%E8/e/g;
   $name =~ s/%2C/,/g;
   $name =~ s/_/ /g;
   return $name;
}
sub graph
{
   my ($my_root, $depth, $page, @array);
   
   $my_root = $_[0];
   $depth = $_[1];
   
   if($depth <= 0)
   {

return 0;

   }
   $nodes{&pretty($my_root)}=1;

   @array=&links_to($my_root);
   $links{$my_root}=\@array;
   foreach $page (@array)
   {

if($nodes{$page}==1) { # only follow links to existing pages graph($page, $depth-1); }

   }
   
   return 0;
   
}
sub links_to
{
   
   my($pagename, @pagecontent, @array, $line, $linkname, %uniq);
   
   $pagename = $_[0] ;
   
   @pagecontent=`wget -q -O - http://fr.wikipedia.org/wiki/$pagename`;
   
   @array=();
   foreach $line (@pagecontent)
   {    

if($line =~ /http\:\/\/fr\.wikipedia\.org\/wiki\/([^\"]*)\"/) { # getting the name of an existing article page $linkname=$1; if(!($linkname eq $pagename) && !forbidden_links($linkname)) { $nodes{&pretty($linkname)}=1; push(@array,&pretty($linkname)); } } if($line =~ /http\:\/\/fr\.wikipedia\.org\/w\/wiki.phtml\?title=([^\&]*)\&action=edit/) { # getting the name of an article that needs creation $linkname=$1; if(!forbidden_links($linkname)) { $nodes{&pretty($linkname)}=2; push(@array,&pretty($linkname)); } }

   }
   
   foreach $pagename (@array)
   {

$uniq{$pagename}=1;

   }
   
   return (keys %uniq);
}
sub forbidden_links
{
   my $pagename=$_[0];
   if($pagename =~ /^Special:/)
   {

return 1;

   }
   if($pagename =~ /^Discuter:/)
   {

return 1;

   }
   if($pagename =~ /^Discussion_Utilisateur:/)
   {

return 1;

   }
   if($pagename =~ /^Wikip%E9dia/)
   {

return 1;

   }
   if($pagename =~ /^Wikipedia/)
   {

return 1;

   }
   if($pagename eq "Accueil")
   {

return 1;

   }

   if($pagename eq "Actualit%E9s")
   {

return 1;

   }
   return 0;
}


Snark 17:51 mar 6, 2003 (CET)

[modifier] Neutralité sur l'article du Rabbi de Loubavitch ?

Euh... j'ai commencé à lire cet article (amené par une recherche dans l'actualité), et je l'ai trouvé affreux : c'est pire qu'un texte d'hommage appuyé, ça ressemble à de la propagande/réclame. Est-ce que cet homme ne serait pas l'objet d'un culte de la part de l'auteur ?

Snark 10 avril 2006 à 20:56 (CEST)

PS: réédité après m'être identifié...

Non, je ne pense pas. Ca me rappelle une blague juive,

Un cordonnier reçoit la lettre d'un rabbin : Sublime lumière, perpétuateur du Saint, béni soit-Il, que Son Nom soit loué, sur cette terre, prodige vivant, inégalable et inégale, voudrais-tu faire l'amabilité à ton humble serviteur de réparer ses chaussures ?
Troublé, le cordonnier se rend chez le rabbin, et lui tend la lettre.
Rabbi, cette lettre vient-elle de vous ?
Heu, oui. Oui, mon ami. Veux-tu bien réparer mes chaussures ?
Mais rabbi, pourquoi tant d'éloges ?
Mais c'est comme ça qu'on m'écrit tout le temps !

Le Rabbi de Loubavitch était universellement encensé. Même ceux qui ne lui vouaient ce qu'on peut effectivement qualifier d'adoration lui portaient une indéfectible estime, et quand on l'a proclamé Messie, les reproches ont fusé non envers lui, car il était évident qu'un tel homme n'aurait pas été capable d'un tel acte, mais ses sectateurs.
En clair, il est très difficile de trouver des articles qui n'en parlent pas sur le ton utilisé dans cette entrée. L'auteur a sans doute tenté de compiler... C'est comme les préjugés sur les ethnies : pour ne pas parler des Juifs, il était tellement évident qu'un Écossais est avare qu'on n'a jamais voulu en compter parmi les philantropes.
Inyan 25 avril 2006 à 23:23 (CEST)