Perl programmation

1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

voila, j'ai un probleme avec un exercice de programmation, je suis sensée ecrire un programme "schtroumpfeur" de texte, c'est a dire qu'il va transformer le texte en discours de schtroumpf, simple au premier abord, mais pas tant que ça. un probleme se pose: comment faire pour travailler avec deux fichiers en lecture pour pouvoir verifier la categorie grammaticale d'un mot avant de le remplacer par "schtroumpf"? voila ce que j'ai fait pour l'instant...je voudrais comparer les mots insérés dans le tableau, avec le lexique ABU pour verifier que ce ne sont pas des verbes ou des prepositions, avant l'operation de remplacement et je n'ai jamais travaillé avec deux fichiers en lecture, alors je suis un peu perdue... s'il vous plait, aidez moi...a charge de revanche...
use strict;
use locale;

my $ligne;
my @t;
my @Ver;
my $i;
my $Ver;
my $article;
my $mot;


open ( IN, "<", "C:\\SL03OP1\\Programmes-Perl\\test.txt") or die "Impossible d'ouvrir le fichier!\n";
open (ENTREE,"<", "C:\\Users\\jc\\Documents\\lexiqueABU.txt") or die "impossible d'ouvrir ABU!\n";
open ( OUT, ">", "C:\\SL03OP1\\Programmes-Perl\\mots.txt") or die "Impossible de créer mots.txt!\n";



while ( $ligne = <IN>) {
chomp $ligne;
while ($ligne =~ /(\w+|['\(\)"\[-\],;.\?:!#\<\>\\\/])/g){
push (@t, $1);



}

}
$i=0;


while ($i <=$#t){
$t[$i]=~s/^(\w+)(em+ent|am+ent|age|ique|istes?)$/schtroumpf\2/;
print OUT $t[$i],"\n";

$i=$i+1;

if ($t[$i]=~/^(une?|les?|la|')$/) {
$t[$i+1]="schtroumpf","\n";


if ($t[$i]=~/'/) {
if ($t[$i-1]=~/l/) {
$t[$i]=~s/'/e/;
}
}


}



}


print "Allez regarder votre nouveau dossier dans C:\\SL03OP1\\Programmes-Perl\\mots.txt!";



close (IN);
close (OUT);
close (ENTREE);
A voir également:

10 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,
je n'ai jamais travaillé avec deux fichiers en lecture
Voici un exemple http://www.commentcamarche.net/forum/affich 2689406 fichiers texte en perl#4
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
ouai merci, j'avais vu ce post tout a l'heure, mais ça n'a pas mardché, enfin je continue a chercher, c'est chaud...!!!
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Si tes fichiers ne sont pas confidentiels tu peux le mettre sur cjoint.com pour que je jete un coup d'oeil.

Il sera souhaitable, que tu mets aussi ce que tu veux obtenir en sortie, puisque pour le moment je n'ai pas toute à fait compris ce que tu veux.
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
ok je vais le faire, pour ce que je veux en sortie, et bien c'est que ce programme soit capable de tranformer n'importe quel texte en schtroumpfeur, c'est a dire qu'une phrase comme : "le petit poisson est passé par la tranquilement "deviendra "le petit schtroumpf est schtroumpfé par la schtroumpfement. Il faut donc qu'a l'issue, tous les noms communs, les verbes du premier groupe, les suffixes en (em+ent|am+ent|age|ique|istes?), en faisant attention que les probleme de type "l'illusionniste" ne se transforme pas en "l'schtroumpfiste", puisque 2 consonne consecutive n'est pas possible... enfin voila, j'espere que c plus clair...j'y suis depuis quelques jours mais la je panique parce que je dois l'envoyer avant ce soir minuit et j'en suis la:
use strict;
use locale;

my $ligne;
my @t;
my @Ver;
my $i;
my $Ver;
my $article;
my $mot;


open ( IN, "<", "C:\\SL03OP1\\Programmes-Perl\\test.txt") or die "Impossible d'ouvrir le fichier!\n";
open (ENTREE,"<", "C:\\Users\\jc\\Documents\\lexiqueABU.txt") or die "impossible d'ouvrir ABU!\n";
open ( OUT, ">", "C:\\SL03OP1\\Programmes-Perl\\mots.txt") or die "Impossible de créer mots.txt!\n";



while ( $ligne = <IN>) {
chomp $ligne;
while ($ligne =~ /(\w+|['\(\)"\[-\],;.\?:!#\<\>\\\/])/g){
push (@t, $1);



}
}

$i=0;
while ( $mot = <ENTREE>) {
chomp $mot;
while ($mot =~/(\w*)\t(\w*)\tVer$/g) {
push (@Ver, $1);
}


}

$i=0;


while ($i <=$#t) {
$t[$i]=~s/^(\w+)(em+ent|am+ent|age|ique|istes?)$/schtroumpf\2/;
print OUT $t[$i],"\n";

$i=$i+1;

if ($t[$i]=~/^(une?|les?|la|'|du|des)$/i) {
$t[$i+1]="schtroumpf","\n";
}
while ($t[$i] eq ($Ver[$i])) {
$t[$i]=~s/^(\w+)(er)$/schtroumpf\2/;
print OUT $t[$i],"\n";



}



if ($t[$i]=~/'/) {
if ($t[$i-1]=~/l/) {
$t[$i]=~s/'/e/,"\n";
}
}

}








print "Allez regarder votre nouveau dossier dans mots.txt!";



close (IN);
close (OUT);
close (ENTREE);
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
le lexique ABU est une liste des mots de la langue avec leur categorie grammaticale, donc je voulais verifier la cat gramm des mots extraits du fichier en lecture par l'abu, mais j'arrive pas a faire le lien...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Et le fichiers?
test.txt
lexiqueABU.txt
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai poster mon .pl sur cjoint.com, mais j'ai juste a envoyer aussi les 2 autres fichiers...attends
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
ABU est trop lourd pour cjoint.com, mais tu y a acces sur ce site http://abu.cnam.fr/DICO/mots-communs.html le fichier test, c'est juste quelques phrases que j'ai ecrites pour tester mon programme, ça donne ça, je sais c un peu gnangnan mais gt pas inspirée (lol):le petit poisson etait en train de nager bien gentiment quand un requin arriva rapidement pour le bouffer alors que nemo était aussi sage qu'il l'avait promis. est ce un monde d'egoiste au point de ne se soucier que de sa propre faim? le requin a bien digéré le poisson et parti a la recherche d'une autre proie quand il tomba sur un enieme probleme.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Je n'ai pas accès pour le fichier ABU.
Il fait combien?

As-tu penser de le compresser?
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
il fait 8,46 Mo, je suis pas trop au fait de tout ce qu'on peut faire, mais mon prof m'a dit qu'il était deja compressé
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
tu peux l'avoir en 2 minutes la:http://abu.cnam.fr/DICO/mots-communs.html
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > 1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Ben, j'essaie de copier le fichier mais je ne peux pas.
En revanche je vois qu'il faut 10 Mo.
Si tu l'as sur ton disque tu peux le compresser et me l'envoyer par mail, voir mon profil.
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
ok je vais essayer...merci
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Voici comment tu peux ouvrir les fichiers en lecture et récupérer tes tableaux.
Je te laisse faire la suite

#!/usr/bin/perl
use strict;
use locale;

my (@t,@Ver);
my ($i,$ligne,$Ver,$article,$mot);


open ( OUT, ">", "mots.txt") or die "Impossible de créer mots.txt!\n";

# le 1er fichier en lecture
# remplir le tableau @t

open ( IN, "<", "C:\\SL03OP1\\Programmes-Perl\\test.txt") or die "Impossible d'ouvrir le fichier!\n";

while ( $ligne = <IN>) {
        chomp $ligne;
        while ($ligne =~ /(\w+|['\(\)"\[-\],;.\?:!#\<\>\\\/])/g){
                push (@t, $1);
        }
}

close(IN);
print "$_\n" for @t; # test, à supprimer après vérification

# le 2ème fichier en lecture
# remplir le tableau @Ver

open (ENTREE,"<", "C:\\Users\\jc\\Documents\\lexiqueABU.txt") or die "impossible d'ouvrir ABU!\n"; 

while ( $mot = <ENTREE>) {
        next unless $mot=~/Ver:/;
        push (@Ver,(split /\s+/,$mot)[0]) if $mot=~/Ver:/;
}
close(ENTREE);
print "$_\n" for @Ver; # test , à supprimer après vérification
__END__

0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci beaucoup!
et mes instruction, je dois les inserer a quel moment?
j'ai ajouté ça
while ($t[$i]==$Ver) {
$t[$i]=~s/(\w+)r^$/schtroumpfer/;
print OUT $t[$i],"\n";

$i=$i+1;

mais a prioris, ça ne donne rien, il n'y a pas d'erreur signalée, mais il ne me remplace toujours pas les verbes par "schtroumpfer...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Voici un piste.
A savoir que normalement tu dois avoir aussi la possibilité de séparer les adjectives des noms, sinon tous deviendra schtroumpf ;-))
#!/usr/bin/perl
use strict;
use locale;

my (@t,@Ver);
my ($i,$ligne,$Ver,$article,$mot);


open ( OUT, ">", "mots.txt") or die "Impossible de créer mots.txt!\n";

open (ENTREE,"<", "C:\\Users\\jc\\Documents\\lexiqueABU.txt") or die "impossible d'ouvrir ABU!\n"; 

while ( $mot = <ENTREE>) {
        next unless $mot=~/Ver:/;
        push (@Ver,(split /\s+/,$mot)[0]) if $mot=~/Ver:/;
}
close(ENTREE);
#print "$_\n" for @Ver;

open ( IN, "<", "C:\\SL03OP1\\Programmes-Perl\\test.txt") or die "Impossible d'ouvrir le fichier!\n";

while ( $ligne = <IN>) {
        while ($ligne =~ /(\w+|['\(\)"\[-\],;.\?:!#\<\>\\\/])/g){
                push (@t, $1);
       }
}

close(IN);

# ici on fait les modifications sur @t
map { s/\w+er\b/schtroumpfer/ } @t;
map { s/(\w+)(e?m+ent|am+ent|age|ique|istes)/schtroumpf$2/ } @t;

# ici on écrit dans mots.txt
print OUT "$_\n" for @t;

__END__

0
1207
 
super! merci, pour les adjectifs, j'y travaille oui , mais ça sera possible que si j'ai acces au fichier ABU, enfin, il me reste encore 2 heures, soyons optimistes, merci encore
0
1207 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour ton aide, je teste ça depuis hier mais ça ne donne rien,dumoins, le tableau 1 n'et pas comparé avec le tableu 2 et puis je suis sensée travailler avec : while, et if exclusivement, je ne sais plus quoi faire...si t toujours dans le coin et que tu as une idée...j'ai essayé ça dans la boucle de lmecture du premier tableau, mais toujours rien ça n'est pas pris en compte
$v=0;
while ($v <=$#ver) {

if ($t[$i]==$ver[$v]) {
$t[$i]="schtroumpfer","\n";
}
$v=$v+1;

aide moi si tu peux..perl, c passionnant, mais c épuisant!
0