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 -
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);
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:
- Perl programmation
- Application de programmation - Guide
- Denon perl pro test - Accueil - Audio
- Programmation envoi sms - Guide
- Programmation binaire - Guide
- Programmation vb - Télécharger - Langages
10 réponses
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
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
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...!!!
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.
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.
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);
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);
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
Salut,
Voici comment tu peux ouvrir les fichiers en lecture et récupérer tes tableaux.
Je te laisse faire la suite
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__
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...
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...
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 ;-))
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__
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!
$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!