Initiation au Perl


Suivant Précédent

  • Séance 5

  • Objectif
  • Un programme de concordance

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

    Texte de travail :


    Un moulin a paroles est en quelque sorte une machine a parler

    c'est-a-dire un veritable producteur de mot dans un flot

    continu : un moulinet a deblaterer, un petit moulin a paroles

    une sequence composee d'un nom, d'une preposition et d'un nom,

    une situation stable par excellence. Le jeu combinatoire de

    plusieurs homographes dans une meme phrase peut provoquer

    des ambiguites d'analyse. Un moulin a gauffres imperturbable

    mouline a vide et produit des crepes bretonnes dans un situation

    indecidable que l'on peut considerer comme instable.



  • Programmes en Perl
  • Programme 1 concord.pl:


    #!/usr/bin/perl

    # concord.pl

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

    # SEANCE 6- PERL : CONCORDANCE

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

    #

    #

    $Ligne = 0;

    READ: while(<>)

    {

    #saute les lignes vides

    next READ if (/^$/);

    s/[ ]+/ /g;

    chop;

    $Ligne++;

    $Lignes[$Ligne] = $_ ;

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

    for $Mot (@Mots) {

    $Mot =~ /\D/ or next ;

    push(@{$Concord{$Mot}},$Ligne);

    }

    }

    for $Mot (sort keys %Concord) {

    for $Ligne (@{$Concord{$Mot}})

    {

    print "<Mot:$Mot><Ligne numero:$Ligne><Ligne:$Lignes[$Ligne]>\n";

    }

    }



    Programme 2 concord.pl:


    #!/usr/bin/perl

    # concord.pl

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

    # SEANCE 6- PERL : CONCORDANCE

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

    #

    #

    $Ligne = 0;

    READ: while(<>)

    {

    #saute les lignes vides

    next READ if (/^$/);

    s/[ ]+/ /g;

    chop;

    $Ligne++;

    $Lignes[$Ligne] = $_ ;

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

    for $Mot (@Mots) {

    $Mot =~ /\D/ or next ;

    push(@{$Concord{$Mot}},$Ligne);

    }

    }

    for $Mot (sort keys %Concord) {

    print "Mot : $Mot \n";

    for $Ligne (@{$Concord{$Mot}})

    {

    print "\t$Ligne: $Lignes[$Ligne]\n";

    }

    }



    Programme 3 concord.pl:


    use strict;

    format STDOUT_TOP =

    Mot n°Ligne # Contenu Ligne

    .

    format STDOUT =

    @<<<<<<<<<<< @>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    $::Mot, $::Ligne, $::Lignes[$ ::Ligne]

    .

    my($Mot, %Exclude);

    for $Mot ("un", "le", "la", "une", "les") {

    $Exclude{$Mot} = 1;

    }

    my(@Mots,$Mot,%Concord);

    my($Ligne) = 0;

    READ: while(<>)

    {

    #saute les lignes vides

    next READ if (/^$/);

    s/[ ]+/ /g;

    chop;

    $Ligne++;

    $::Lignes[$Ligne] = $_ ;

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

    for $Mot (@Mots) {

    $Mot =~ /\D/ or next ;

    $Exclude{"\L$Mot "} and next ;

    push(@{$Concord{$Mot}},$Ligne);

    }

    }

    for $::Mot (sort keys %Concord) {

    for $::Ligne (@{$Concord{$::Mot}})

    {

    write;

    $::Mot = "";

    }

    }