Import des Catégories DMOZ dans eSyndicat avec SAS

Discussion in 'French' started by pmadfm, Mar 27, 2008.

  1. pmadfm

    pmadfm 01-AGF / 01-ASI

    Bonjour,

    Pour ceux qui ont la chance de pouvoir avoir accès à un ordinateur ayant accès au logiciel SAS, voici un exemple d'un programme permettant l'extraction des catégories DMOZ françaises.

    Ce programme est perfectible, il à été réalisé rapidement et il est bien sur transposable dans d'autre langage de programmation.

    La première chose est d'aller sur le répertoire DMOZ et de télécharger les deux fichier Structure et Content qui contiennent respectivement les catégories et les Sites Web.

    Sachez enfin que seulement 210 000 sites web sont en Français et environ 24500 catégories.

    Après avoir effectué ce travail vous pourrez adapter et lance ce programme :
    PHP:
    filename in "C:\Temp\content.rdf.u8";
    filename in "C:\Temp\structure.rdf.u8";

    data structure(dropz1 ok i index=(path /unique catmere));
     
    retain path id level description title ok;
     
    length description path catmere $250. title $80. id level parent_id 5;
     
    infile in missover length=lg;
     
    input z1 $varying256lg;
     if 
    _n_=1 then do; id=-1end;

     if 
    index(z1,'Topic r:id="Top/World/Français')then do;
         * 
    Ce IF okpermet de prendre en compte les enregistrements sans description;
         if 
    ok then link ecrit;
        
    ok=1;
        
    path=compress(tranwrd(scan(z1,2,'"'),'Top/World/Français/',''));
        
    level=count(path,'/')+1;
     
    end;
     if 
    index(z1,"<d:Title>") and ok then title=tranwrd(scan(z1,3,'><'),'_',' ');
     if 
    index(z1,"<d:Description>") and ok then do;
        
    description=scan(z1,3,'><');
         do while ( 
    index(z1,'<')=);
            
    input z1 $varying256lg @;
            
    description=trim(description)!!scan(z1,3,'><');
        
    end;
        
    link ecrit;
     
    end;
    return;
    ecrit:
        
    id+1;
        do 
    i=1 to level-1;
            
    catmere=trim(catmere)!!scan(path,i,'/')!!'/';
        
    end
        
    catmere=compress(substr(catmere,1,length(catmere)-1));
        
    output
        
    ok=0;
    return;
    run;

    proc append data=structure base=st2run;

    proc sql;
     
    update structure a
     set parent_id
    =(select id from st2 b 
                    where b
    .path=a.catmere);
    quit;
    L'instruction RETAIN, est une spécificité du langage SAS, elle permet de maintenir le contenu des variables lors du chargement du PDV avec les valeurs de l'enregistrement suivant. Entendez par là la lecture du record suivant.

    Ensuite vous devrez le transférer avec SAS Access par exemple dans MySQL, et vous aurez enfin le plaisir de vous amusez avec les accents.

    Bon courage.

    PS : Si vous souhaitez le programme pour les sites Web n'hésitez pas à le demander ;-)
    Last edited: Mar 27, 2008

Share This Page