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.
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 = "";
}
}