Initiation au Langage Perl


Suivant Précédent

  • Séance 2

  • Objectif
  • (1) catégoriser les mots dans un texte, (2) lire un texte catégorise, (3) mise en oeuvre d'un dictionnaire catégorisé

    On utilisera les programmes déjà écrits auxquels on ajoutera les modifications nécessaires pour l'objectif visé.

    Texte de travail :


    bébé (CAT=NOM,GENRE=MASC,NOMBRE=SING) tonique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) et (CAT=CONJ,TYPE=COORDIN)dynamique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) ne (CAT=ADV,TYPE=NEG,VAL=NE) lache (CAT=VERBE,PERS=3,NOMBRE=SING) pas (CAT=ADV,TYPE=NEG,VAL=PAS) . (CAT=PONC,TYPE=FORTE)



  • Programme en Perl
  • Programme 1


    #!/usr/bin/perl
    # lircateg.pl
    #-----------------------------------------------------------------------------------
    # SEANCE 2 - PERL : LIRE TEXTE CATEGORISE
    #-------------------------------------------------------------------------
    #
    sub rangemot { $existmot = 0;
    foreach $motInDico1 (@dico1)
    {
    if ($motInDico1 eq $mot)
    {
    print "Mot deja recense dans dico1 \n";
    $existmot=1;
    }
    }
    if ($existmot == 0)
    {
    $dico1[$i]=$mot;
    $i = $i + 1;
    }
    if (exists ($dico2{$mot}))
    {
    print "Mot deja recense dans dico2 \n";
    }
    else
    {
    $dico2{$mot}="$mot"." <Categorie: $cat>";
    }



    }



    #Programme principal


    %dico2=();
    open(DIC1,">dico1.txt");
    open(DIC2,">dico2.txt");
    $i = 0;
    $Ligne = 0;



    READ: while(<>)
    {
    #saute les lignes vides
    next READ if (/^$/);
    s/\)[^ ]/\) /g;
    s/[ ]+/ /g;



    chop;
    $Ligne++;
    $Lignes[$Ligne] = $_ ;
    @Mots = split(/\) /);
    for $motcat (@Mots) {
    print "mot traite : $motcat \n";
    $motcat =~ /\D/ or next ;
    $motcat = "$motcat".")";
    print "$motcat \n";
    $motcat =~ /(.*) \(/;
    $mot = $1;
    print "Forme : $mot \n";
    $motcat =~ /\((.*)/;
    $cat = "($1";
    print "Cat : $cat \n";
    rangemot;
    }
    }


    print "Lecture/Ecriture dico1 \n";
    foreach $mot (@dico1)
    {
    print "mot in dico1 : $mot\n";
    print DIC1 "$mot\n";
    }
    print "Lecture/Ecriture dico2 \n";
    foreach $item (sort keys %dico2)
    {
    print "(mot : $item) => Description in dico2 : $dico2{$item}\n";
    print DIC2 "$dico2{$item}\n";
    }
    close(DIC1);
    close(DIC2);



    Programme 2

    Texte de travail :


    la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=NOM,GENRE=FEM,NOMBRE=SING) brise (CAT=VERBE,PERS=3,NOMBRE=SING) la (CAT=CLIT) brise (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=ADJ,GENRE=FEM,NOMBRE=SING) brise (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING) brise (CAT=VERBE,PERS=3,NOMBRE=SING)






    #!/usr/bin/perl

    # lircateg2.pl
    #-----------------------------------------------------------------------------------
    # SEANCE 2 - PERL : LIRE TEXTE CATEGORISE
    #-------------------------------------------------------------------------
    #

    sub rangemot {
    $existmot = 0;
    foreach $motInDico1 (@dico1)
    {
    if ($motInDico1 eq $mot)
    {
    print "Mot deja recense dans dico1 \n";
    $existmot=1;
    }
    }
    if ($existmot == 0)
    {
    $dico1[$i]=$mot;
    $i = $i + 1;
    }
    if (exists ($dico2{$mot}))
    {
    $existcat = 0;
    foreach $catInDico2 (@{$dico2{$mot}})
    {
    if ($catInDico2 eq $cat)
    {
    $existcat=1;
    }
    }

    if ($existcat == 0)
    {
    push(@{$dico2{$mot}},$cat);
    print "Mot deja recense dans dico2, nouvelle categorie \n";
    }
    else
    {
    print "Mot deja recense dans dico2, et categorie deja recensee \n";
    }
    }
    else
    {
    @{$dico2{$mot}}=();
    push(@{$dico2{$mot}},$cat);
    }

    }

    #Programme principal

    %dico2=();
    open(DIC1,">dico1.txt");
    open(DIC2,">dico2.txt");
    $i = 0;
    $Ligne = 0;

    READ: while(<>)
    {

    #saute les lignes vides
    next READ if (/^$/);
    s/([^ ])$/$1 /;
    s/[ ]+/ /g;

    chop;
    $Ligne++;
    $Lignes[$Ligne] = $_ ;
    @Mots = split(/\) /);
    for $motcat (@Mots) {
    print "mot traite : $motcat \n";
    $motcat =~ /\D/ or next ;
    $motcat = "$motcat".")";
    print "$motcat \n";
    $motcat =~ /(.*) \(/;
    $mot = $1;
    print "Forme : $mot \n";
    $motcat =~ /\((.*)/;
    $cat = "($1";
    print "Cat : $cat \n";
    rangemot;
    }
    }


    print "Lecture/Ecriture dico1 \n";
    foreach $mot (@dico1)
    {
    print "mot in dico1 : $mot\n";
    print DIC1 "$mot\n";
    }
    print "Lecture/Ecriture dico2 \n";
    foreach $item (sort keys %dico2)
    {
    print "(mot : $item) => Description in dico2 :\n";
    @descriptionMot =@{$dico2{$item}};
    print "$item\n";
    print DIC2 "$item\n";
    foreach $categorie (@descriptionMot)
    {
    print "\t\tCategorie : $categorie\n";
    print DIC2 "\t\tCategorie : $categorie\n";
    }
    }
    close(DIC1);
    close(DIC2);

    Programme 3

    Texte de travail :


    bébé (CAT=NOM,GENRE=MASC,NOMBRE=SING) tonique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) et (CAT=CONJ,TYPE=COORDIN) dynamique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) ne (CAT=ADV,TYPE=NEG,VAL=NE) lache (CAT=VERBE,PERS=3,NOMBRE=SING) pas (CAT=ADV,TYPE=NEG,VAL=PAS) . (CAT=PONC,TYPE=FORTE) la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=NOM,GENRE=FEM,NOMBRE=SING) brise (CAT=VERBE,PERS=3,NOMBRE=SING) la (CAT=CLIT) glace (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=ADJ,GENRE=FEM,NOMBRE=SING) brise (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING) glace (CAT=VERBE,PERS=3,NOMBRE=SING)



    #!/usr/bin/perl
    # lirecateg3.pl
    #-----------------------------------------------------------------------------------
    # SEANCE 2 - PERL : LIRE TEXTE CATEGORISE
    #-------------------------------------------------------------------------
    #

    sub rangemot {
    $existmot = 0;
    foreach $motInDico1 (@dico1)
    {
    if ($motInDico1 eq $mot)
    {
    print "Mot deja recense dans dico1 \n";
    $existmot=1;
    }
    }
    if ($existmot == 0)
    {
    $dico1[$i]=$mot;
    $i = $i + 1;
    }
    if (exists ($dico2{$mot}))
    {
    $existcat = 0;
    foreach $catInDico2 (@{$dico2{$mot}})
    {
    if ($catInDico2 eq $cat)
    {
    $existcat=1;
    }
    }

    if ($existcat == 0)
    {
    push(@{$dico2{$mot}},$cat);
    print "Mot deja recense dans dico2, nouvelle categorie \n";
    }
    else
    {
    print "Mot deja recense dans dico2, et categorie deja recensee \n";
    }
    }
    else
    {
    @{$dico2{$mot}}=();
    push(@{$dico2{$mot}},$cat);
    }

    }

    #Programme principal

    %dico2=();
    open(DIC1,">dico1.txt");
    open(DIC2,">dico2.txt");
    open(TEXTESSLIGNE,">textessligne.txt");
    $i = 0;
    $Ligne = 0;

    $texte = "";

    READ: while(<>)
    {

    #saute les lignes vides
    next READ if (/^$/);
    s/\)([^ ])/\) $1/g;
    s/[ ]+/ /g;
    chomp;
    $Ligne++;
    $Lignes[$Ligne] = $_ ;

    $texte = "$texte"." $_"
    }

    $_ = $texte;
    print TEXTESSLIGNE "$texte";
    print "$texte";
    s/^ ([^ ])/$1/;
    s/\)([^ ])/\) $1/g;
    s/[ ]+/ /g;
    @Mots = split(/\) /);
    for $motcat (@Mots) {
    print "mot traite : $motcat \n";
    $motcat =~ /\D/ or next ;
    $motcat = "$motcat".")";
    print "$motcat \n";
    $motcat =~ /(.*) \(/;
    $mot = $1;
    print "Forme : $mot \n";
    $motcat =~ /\((.*)/;
    $cat = "($1";
    print "Cat : $cat \n";
    rangemot;
    }



    print "Lecture/Ecriture dico1 \n";
    foreach $mot (@dico1)
    {
    print "mot in dico1 : $mot\n";
    print DIC1 "$mot\n";
    }
    print "Lecture/Ecriture dico2 \n";
    foreach $item (sort keys %dico2)
    {
    print "(mot : $item) => Description in dico2 :\n";
    @descriptionMot =@{$dico2{$item}};
    print "$item\n";
    print DIC2 "$item\n";
    foreach $categorie (@descriptionMot)
    {
    print "\t\tCategorie : $categorie\n";
    print DIC2 "\t\tCategorie : $categorie\n";
    }
    }
    close(TEXTESSLIGNE);
    close(DIC1);
    close(DIC2);

    Programme 4

    Texte de travail :


    £ bébé (CAT=NOM,GENRE=MASC,NOMBRE=SING) tonique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) et (CAT=CONJ,TYPE=COORDIN) dynamique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) ne (CAT=ADV,TYPE=NEG,VAL=NE) lache (CAT=VERBE,PERS=3,NOMBRE=SING) pas (CAT=ADV,TYPE=NEG,VAL=PAS) . (CAT=PONC,TYPE=FORTE) la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=NOM,GENRE=FEM,NOMBRE=SING) brise (CAT=VERBE,PERS=3,NOMBRE=SING) la (CAT=CLIT) glace (CAT=NOM,GENRE=FEM,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE)

    £ la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=ADJ,GENRE=FEM,NOMBRE=SING) brise (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING) glace (CAT=VERBE,PERS=3,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE)




    #!/usr/bin/perl

    # lircateg4.pl
    #-----------------------------------------------------------------------------------
    # SEANCE 2 - PERL : LIRE TEXTE CATEGORISE
    #-------------------------------------------------------------------------
    #

    sub rangemot {
    $existmot = 0;
    foreach $motInDico1 (@dico1)
    {
    if ($motInDico1 eq $mot)
    {
    print "Mot deja recense dans dico1 \n";
    $existmot=1;
    }
    }
    if ($existmot == 0)
    {
    $dico1[$i]=$mot;
    $i = $i + 1;
    }
    if (exists ($dico2{$mot}))
    {
    $existcat = 0;
    foreach $catInDico2 (@{$dico2{$mot}})
    {
    if ($catInDico2 eq $cat)
    {
    $existcat=1;
    }
    }

    if ($existcat == 0)
    {
    push(@{$dico2{$mot}},$cat);
    print "Mot deja recense dans dico2, nouvelle categorie \n";
    }
    else
    {
    print "Mot deja recense dans dico2, et categorie deja recensee \n";
    }
    }
    else
    {
    @{$dico2{$mot}}=();
    push(@{$dico2{$mot}},$cat);
    }

    }

    #Programme principal

    %dico2=();
    open(DIC1,">dico1.txt");
    open(DIC2,">dico2.txt");
    open(TEXTESSLIGNE,">textessligne.txt");
    $i = 0;
    $paragrapheNb = 0;

    $texte = "";

    READ: while(<>){

    #saute les lignes vides


    next READ if (/^$/);

    if (/£/) {
    $_=$_." ";
    s/£(.*)/$1/;
    s/^ ([^ ])/$1/;
    s/\)([^ ])/\) /g;
    s/[ ]+/ /g;
    chomp;
    $Paragraphes[$paragrapheNb] = $_ ;
    $paragrapheNb++;
    }

    }

    for $paragraphe (@Paragraphes) {
    $_ = $paragraphe;
    print TEXTESSLIGNE "£$paragraphe\n\n";
    print "$paragraphe";

    # s/^ ([^ ])/$1/;
    # s/\)([^ ])/\) $1/g;
    # s/[ ]+/ /g;
    @Mots = split(/\) /);
    for $motcat (@Mots) {
    print "mot traite : $motcat \n";
    $motcat =~ /\D/ or next ;
    $motcat = "$motcat".")";
    print "$motcat \n";
    $motcat =~ /(.*) \(/;
    $mot = $1;
    print "Forme : $mot \n";
    $motcat =~ /\((.*)/;
    $cat = "($1";
    print "Cat : $cat \n";
    rangemot;
    }
    }


    print "Lecture/Ecriture dico1 \n";
    foreach $mot (@dico1)
    {
    print "mot in dico1 : $mot\n";
    print DIC1 "$mot\n";
    }
    print "Lecture/Ecriture dico2 \n";
    foreach $item (sort keys %dico2)
    {
    print "(mot : $item) => Description in dico2 :\n";
    @descriptionMot =@{$dico2{$item}};
    print "$item\n";
    print DIC2 "$item\n";
    foreach $categorie (@descriptionMot)
    {
    print "\t\tCategorie : $categorie\n";
    print DIC2 "\t\tCategorie : $categorie\n";
    }
    }
    close(TEXTESSLIGNE);
    close(DIC1);
    close(DIC2);

    Programme 5

    Texte de travail :



    £ bébé (CAT=NOM,GENRE=MASC,NOMBRE=SING) tonique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) et
    (CAT=CONJ,TYPE=COORDIN) dynamique (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE)
    très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE) suit
    (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux (CAT=NOM,GENRE=MASC,NOMBRE=PLUR)
    et (CAT=CONJ,TYPE=COORDIN) très (CAT=ADV) accrocheur (CAT=ADJ,GENRE=MASC,NOMBRE=SING) .
    (CAT=PONC,TYPE=FORTE) suit (CAT=VERBE,PERS=3,NOMBRE=SING) des (CAT=PREP,VAL=DES) yeux
    (CAT=NOM,GENRE=MASC,NOMBRE=PLUR) et (CAT=CONJ,TYPE=COORDIN) ne (CAT=ADV,TYPE=NEG,VAL=NE) lache (CAT=VERBE,PERS=3,NOMBRE=SING) pas (CAT=ADV,TYPE=NEG,VAL=PAS) . (CAT=PONC,TYPE=FORTE) la (CAT=DET,GENRE=FEM,NOMBRE=SING)
    petite (CAT=NOM,GENRE=FEM,NOMBRE=SING) brise (CAT=VERBE,PERS=3,NOMBRE=SING) la (CAT=CLIT) glace
    (CAT=NOM,GENRE=FEM,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE)

    £ la (CAT=DET,GENRE=FEM,NOMBRE=SING) petite (CAT=ADJ,GENRE=FEM,NOMBRE=SING) brise
    (CAT=NOM,GENRE=FEM,NOMBRE=SING) la (CAT=DET,GENRE=FEM,NOMBRE=SING)
    glace (CAT=VERBE,PERS=3,NOMBRE=SING) . (CAT=PONC,TYPE=FORTE)








    #!/usr/bin/perl
    # lircateg5.pl
    #-----------------------------------------------------------------------------------
    # SEANCE 2 - PERL : LIRE TEXTE CATEGORISE
    #-------------------------------------------------------------------------
    #
    sub rangemot {
    $existmot = 0;
    foreach $motInDico1 (@dico1)
    {
    if ($motInDico1 eq $mot)
    {
    $existmot=1;
    }
    }
    if ($existmot == 0)
    {
    $dico1[$i]=$mot;
    $i = $i + 1;
    }
    if (exists ($dico2{$mot}))
    {
    $existcat = 0;
    foreach $catInDico2 (@{$dico2{$mot}})
    {
    if ($catInDico2 eq $cat)
    {
    $existcat=1;
    }
    }

    if ($existcat == 0)
    {
    push(@{$dico2{$mot}},$cat);
    }
    }
    else
    {
    @{$dico2{$mot}}=();
    push(@{$dico2{$mot}},$cat);
    }

    }

    #Programme principal

    %dico2=();
    open(DIC1,">dico1.txt");
    open(DIC2,">dico2.txt");
    open(TEXTESSLIGNE,">textessligne.txt");
    $i = 0;
    $paragrapheNb = 0;

    $texte = "";

    READ: while(<>){
    #saute les lignes vides
    next READ if (/^$/);
    if (/£/) {

    if ($i == 0) {
    print "Premier paragraphe : on ne fait rien \n";
    $i++;
    }
    else {
    $Paragraphes[$paragrapheNb] = $texte ;
    $paragrapheNb++;
    print "Texte 2 : $texte\n";
    $texte="";
    }
    print "Ligne : $_\n";
    $ligne = $_;
    chomp($ligne);
    $texte = "$texte"."$ligne";
    print "Texte 1 : $texte\n";
    print "paranb 1 : $paragrapheNb \n";
    }
    else {
    print "paranb 2 : $paragrapheNb \n";
    print "Ligne 2 : $_\n";
    $ligne = $_;
    chomp($ligne);
    $texte = "$texte"." $ligne";
    print "Texte 3 : $texte\n";
    }

    }

    $Paragraphes[$paragrapheNb] = $texte ;

    for $paragraphe (@Paragraphes) {
    $_ = $paragraphe;
    print TEXTESSLIGNE "$paragraphe\n\n";
    print "$paragraphe\n";
    $_=$_." ";
    s/£(.*)/$1/;
    s/^ ([^ ])/$1/;
    s/\)([^ ])/\) $1/g;
    s/[ ]+/ /g;
    @Mots = split(/\) /);
    for $motcat (@Mots) {
    $motcat =~ /\D/ or next ;
    $motcat = "$motcat".")";
    $motcat =~ /(.*) \(/;
    $mot = $1;
    $motcat =~ /\((.*)/;
    $cat = "($1";
    rangemot;
    }
    }

    foreach $mot (@dico1)
    {
    print DIC1 "$mot\n";
    }
    foreach $item (sort keys %dico2)
    {
    @descriptionMot =@{$dico2{$item}};
    print DIC2 "$item\n";
    foreach $categorie (@descriptionMot)
    {
    print DIC2 "\t\tCategorie : $categorie\n";
    }
    }
    close(TEXTESSLIGNE);
    close(DIC1);
    close(DIC2);