Initiation au Langage Perl


Suivant Précédent

  • Séance 1

  • Objectif : lire un mot dans un texte
  • Un texte en entrée, lire les mots de ce texte, ranger les mots dans un dictionnaire.

  • Programmes en Perl
  • Programme 1



    #!/usr/bin/perl

    # liremot.pl

    #-----------------------------------------------------------------------------------

    #Ce petit programme est une introduction au TAL avec PERL. Il permet de lire une

    # suite de mots entree par l'utilisateur. Cette suite de mots est segmentee

    # en mots, ces derniers etant enregistres dans deux dictionnaires

    #-----------------------------------------------------------------------------------

    print STDOUT "Entrez une suite de mots : ";

    $ligne = <STDIN>;

    print STDOUT "Ligne lue : $ligne \n";

    $mot="";

    $i=0;

    $nbcar = 0;

    %dico2=();

    open(DIC1,">dico1.txt");

    open(DIC2,">dico2.txt");

    $ligne =~s/[ ]+/ /g;

    $ligne =~s/^ ([^ ])/$1/g;

    print STDOUT "Ligne modifiee (sans double blancs et sans blanc au depart) : $ligne \n";

    while (substr($ligne,$nbcar, 1)=~/(.)/)

    {

    $caractere = $1;

    print "caractere lu : $caractere\n";

    if ($caractere =~/ /)

    {

    print "Mot construit : <mot$i = $mot>\n";

    $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: ?>";

    }

    $mot="";

    }

    else {

    $mot = "$mot"."$caractere";

    print "Mot en construction : $mot\n";

    }

    $nbcar = $nbcar + 1;

    }

    print "Mot construit : <mot$i = $mot>\n";

    $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: ?>";

    }

    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 "(mot : $item) => $dico2{$item}\n";

    }

    close(DIC1);

    close(DIC2);



    Programme 2



    #!/usr/bin/perl

    # lirmo2.pl

    #-----------------------------------------------------------------------------------

    # SEANCE 1 - PERL : LIRE UN MOT

    #-----------------------------------------------------------------------------------

    #Ce petit programme est une introduction au TAL avec PERL. Il permet de lire une

    # suite de mots entree par l'utilisateur. Cette suite de mots est segmentee

    # en mots, ces derniers etant enregistres dans deux dictionnaires

    #-----------------------------------------------------------------------------------

    #--------------------------------------------------------------

    # Sous-Programme

    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: ?>";

    }

    }

    #--------------------------------------------------------------

    # Programme principal

    print STDOUT "Entrez une suite de mots : ";

    $ligne = <STDIN>;

    print STDOUT "Ligne lue : $ligne \n";

    $mot="";

    $i=0;

    $nbcar = 0;

    %dico2=();

    open(DIC1,">dico1.txt");

    open(DIC2,">dico2.txt");

    $ligne =~s/[ ]+/ /g;

    $ligne =~s/^ ([^ ])/$1/g;

    print STDOUT "Ligne modifiee (sans double blancs et sans blanc au depart) : $ligne \n";

    while (substr($ligne,$nbcar, 1)=~/(.)/)

    {

    $caractere = $1;

    print "caractere lu : $caractere\n";

    if ($caractere =~/ /)

    {

    print "Mot construit : <mot$i = $mot>\n";

    rangemot;

    $mot="";

    }

    else {

    $mot = "$mot"."$caractere";

    print "Mot en construction : $mot\n";

    }

    $nbcar = $nbcar + 1;

    }

    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 "(mot : $item) => $dico2{$item}\n";

    }

    close(DIC1);

    close(DIC2);



    Programme 3



    #!/usr/bin/perl

    # lirmo3.pl

    #-----------------------------------------------------------------------------------

    # SEANCE 1 - PERL : LIRE UN MOT

    #-----------------------------------------------------------------------------------

    #Ce petit programme est une introduction au TAL avec PERL. Il permet de lire une

    # suite de mots dans un fichier. Cette suite de mots est segmentee

    # en mots, ces derniers etant enregistres dans deux dictionnaires

    #-----------------------------------------------------------------------------------

    #--------------------------------------------------------------

    # Sous-Programme

    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: ?>";

    }

    }

    #--------------------------------------------------------------

    # Programme principal

    $mot="";

    $i=0;

    $nbcar = 0;

    %dico2=();

    open(DIC1,">dico1.txt");

    open(DIC2,">dico2.txt");

    open(FILEINPUT,"$ARGV[0]");

    LIGNE: while($ligne=<FILEINPUT>)

    {

    print "$ligne";

    #saute les lignes commencant par le diese

    next LIGNE if ($ligne=~/^#/);

    #saute les lignes vides

    next LIGNE if ($ligne=~/^$/);

    print "ligne lue : $ligne\n";

    #suppression de certains caracteres

    $ligne =~s/[\/\t]+/ /g;

    $ligne =~s/[\$\.\:\)\(\"\/;\{\}=\@\+\,]+/ /g;

    $ligne =~s/[ ]+/ /g;

    $ligne =~s/^ ([^ ])/$1/g;

    $ligne =~s/([^ ]) $/$1/g;

    print STDOUT "Ligne modifiee (sans double blancs et sans blanc au depart...) : $ligne \n";

    while (substr($ligne,$nbcar, 1)=~/(.)/)

    {

    $caractere = $1;

    print "caractere lu : $caractere\n";

    if ($caractere =~/ /)

    {

    print "Mot construit : <mot$i = $mot>\n";

    rangemot;

    $mot="";

    }

    else {

    $mot = "$mot"."$caractere";

    print "Mot en construction : $mot\n";

    }

    $nbcar = $nbcar + 1;

    }

    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 "(mot : $item) => $dico2{$item}\n";

    }

    close(DIC1);

    close(DIC2);

    close(FILEINPUT);



    Programme 4



    #!/usr/bin/perl

    # lirefichier.pl

    #-----------------------------------------------------------------------------------

    # SEANCE 1 - PERL : LIRE MOT

    #-------------------------------------------------------------------------

    #

    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: ?>";

    }

    }

    #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/[\/\t]+/ /g;

    s/[\$\.\:\)\(\"\/;\{\}=\@\+\,]+/ /g;

    chop;

    $Ligne++;

    $Lignes[$Ligne] = $_ ;

    @Mots = split(/\W+/);

    for $mot (@Mots) {

    $mot =~ /\D/ or next ;

    print "$mot \n";

    rangemot;

    }

    }

    for $line (@Lignes) {

    print "Ligne : $line \n";

    }

    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 "(mot : $item) => $dico2{$item}\n";

    }

    close(DIC1);

    close(DIC2);