[Boîtes à outils]


  • Présentation
  • Boîte à outils n°1
  • Boîte à outils n°2
  • Boîte à outils n°3
  • Analyses

  • Boîte à outils n°2 - Extraction des patrons avec deux outils: Tree Tagger et Cordial


    1. Description de la boîte à outils 2:


    >__Après avoir étiqueté nos rubriques avec le script 1 pour la sortie XML et étiqueté nos rubriques sur le logiciel Cordial pour la sortie TXT nous allons maintenant extraire les patrons morpho-syntaxiques à partir des deux sorties, l'une réalisée par le script avec Tree tagger, l'autre réalisée par l'utilisation de Cordial.

    >__Pour la sortie étiquetée de Tree Tagger nous utilisons un script qui va rechercher tous les "patrons" du type "NOM ADJ" sur l'ensembe de la rubrique au format XML.

    
            
              

    open(FILE,"$ARGV[0]"); my @lignes=; close(FILE); while (my $ligne=shift(@lignes)) { chomp $ligne; my $sequence=""; my $longueur=0; if ( $ligne =~ /NOM<\/data>[^<]+<\/data>([^<]+)<\/data><\/element>/) { my $forme=$1; $sequence.=$forme; $longueur=1; my $nextligne=$lignes[1]; #saut de ligne dans nos scripts if ( $nextligne =~ /ADJ<\/data>[^<]+<\/data>([^<]+)<\/data><\/element>/) { my $forme=$1; $sequence.=" ".$forme; $longueur=2; } } if ($longueur == 2) { print $sequence,"\n"; } }

    2. Voici un aperçue de la sortie que produit ce script sur la rubrique "Entreprises":

    choix fiscal
    parents d’enfants
    enfant étudiant
    foyer fiscal
    intérêts propres
    itinéraires bis
    formation continue
    catégories d’âge
    baisse immédiate
    liens hypertextes
    lycées parisiens
    marché français
    marques étrangères
    croissance rapide
    hausse inédite
    smic britannique
    réduction draconienne
    aides sociales
    travailleurs pauvres
    sciences économiques
    formation continue
    dynamiques différentes
    groupe pharmaceutique
    approche graduelle
    propriété intellectuelle

    A.1] Pour obtenir un rendu plus "visible" et ergonomique nous avons associé une feuille de style XSLT à chaque rubrique au format XML afin que celle ci extrait d'une part l'information voulu, soit les NOM ADJ ou autre patrons morpho-syntaxique et afin que d'autre part la sortie soit agréable à regarder et lisible par le plus grand nombre.

        
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
              <xsl:output method="html"/>
              <xsl:template match="/">
                  <html>
                      <body bgcolor="#FF5500">
                          <table align="center" width="50%" bgcolor="173653" bordercolor="#bad0d1" border="1">
                              <tr bgcolor="#FF8A9A">
                                  <td>
                                      <font color="#c86755" align="center">
                                          <h1>
                                              Extraction de patron
                                              <font color="#f0b156">
                                                  <b>NOM</b>
                                              </font>
                                              <font color="#bad0d1">
                                                  <b>ADJ</b>
                                              </font>
                                          </h1>
                                      </font>
                                  </td>
                              </tr>
                              <tr>
                                  <td>
                                      <blockquote>
                                          <xsl:apply-templates select="//article"/>
                                      </blockquote>
                                  </td>
                              </tr>
                          </table>
                      </body>
                  </html>
              </xsl:template>
              <xsl:template match="element">
                  <xsl:choose>
                      <xsl:when test="(./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'NOM')]])">
                          <font color="#f0b156">
                              <xsl:value-of select="./data[3]"/>
                          </font>
                          <xsl:text></xsl:text>
                      </xsl:when>
                      <xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][./data[contains(text(),'ADJ')]])">
                          <font color="#bad0d1">
                              <xsl:value-of select="./data[3]"/>
                          </font>
                          <br/>
                      </xsl:when>
                  </xsl:choose>
    
              </xsl:template>
          </xsl:stylesheet>
    
    

    A.2] Voici un aperçue de la sortie au format HTML une fois que la feuille de style est appliquée à un fichier XML:

    HTML

    B.1] Pour la sortie étiquetée de Cordial nous utilisons un script pour extraire les patrons issus de l'étiquetage par Cordial qui sont dans les fichiers .CNR

          
            #!/usr/bin/perl
            #-------------------------------------------------
            # PROGRAMME PRINCIPAL
            #-------------------------------------------------
            my @LISTETOKEN=();
            my @LISTELEMME=();
            my @LISTEETIQUETTE=();
            #--------------------------------------------------
            # lecture du fichier PATRON
            open(PATRON,"$ARGV[1]");
            my @LISTEPATRON=<PATRON>; # lecture globale du fichier dans une liste
            close(PATRON);
            #--------------------------------------------------
            # le fichier cordial est le premier argument du programme
            open(CORDIAL,"$ARGV[0]");  # visiblement pas de pb d'encodage...
            while (my $ligne=<CORDIAL>) {
                $ligne=~s/\r//;
                chomp($ligne);
                if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/) {
                    my ($token,$lemme,$etiquette)=($1,$2,$3);
                    if ($etiquette!~/PCTF/) {
                        push(@LISTETOKEN,$token);
                        push(@LISTELEMME,$lemme);
                        push(@LISTEETIQUETTE,$etiquette);
                    }
                    else {
                        &compare(\@LISTETOKEN,\@LISTEETIQUETTE);
                        # creation d'un reference vers une liste
                        @LISTETOKEN=();
                        @LISTEETIQUETTE=();
                        @LISTELEMME=();
                    }
                }
            }
            # -----------------------------------------------------
            # SOUS - PROGRAMMES
            #------------------------------------------------------
            sub compare {
                # TRAITEMENT...
                my ($first,$second)=@_;
                my @LISTETOKEN=@$first;
                my @LISTEETIQUETTE=@$second;
                foreach my $patron (@LISTEPATRON) {
                    $patron=~s/\r//;
                    chomp $patron;
                    #print "$patron\n";
                    my $texte_des_pos=join(" ",@LISTEETIQUETTE);
                    while ($texte_des_pos=~/$patron/g) {
                        my $contextebefore=$`;
                        my $compteurblanc=0;
                        while ($contextebefore=~/ /g) {
                            $compteurblanc++;
                        }
                        my @MONPATRONENCOURS=split(/ /, $patron);
                        my $longueurpatron=$#MONPATRONENCOURS;
                        my $bornesup = $compteurblanc + $longueurpatron;
                        print "@LISTETOKEN[$compteurblanc..$bornesup] \n";
                    }
                }
            }
    
    

    B.2] Voici un aperçu de ce que produit ce script:

    système de qualifications élimination progressive système de qualifications Prix d' ouverture est en ouest manière curieuse Danse sur glace titre mondial programme libre titre mondial patinage artistique nageur français pilote espagnol discrimination salariale fédération pour discrimination monde américaines équipe nationale justice civile paires de chaussures star argentine vague d' indignation vie désastreuses ouvriers immigrés conditions de vie