Perl programmation

Fermé
1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009 - 23 janv. 2009 à 16:37
1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009 - 25 janv. 2009 à 14:21
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 18:27
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 18:42
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 18:48
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:00
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:02
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 19:03
Re,

Et le fichiers?
test.txt
lexiqueABU.txt
0
1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:06
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:13
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 19:24
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
23 janv. 2009 à 19:32
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
23 janv. 2009 à 19:33
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > 1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:38
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
23 janv. 2009 à 19:40
ok je vais essayer...merci
0
1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:18
0
1207 Messages postés 18 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 19:20
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 20:35
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
23 janv. 2009 à 20:48
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
23 janv. 2009 à 21:31
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
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 vendredi 23 janvier 2009 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 14:21
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