perl + xml - Perl - Programmation
Marsh Posté le 10-10-2013 à 01:31:36
Il vient d'ou ce Vide?
A+,
Marsh Posté le 10-10-2013 à 08:39:40
gilou a écrit : Il vient d'ou ce Vide? |
Bonjour ,
En fait dans la sortie , je veux qu'a chaque fois il trouve un signe de ponctuation il fait un retour a la ligne :
avec out33.txt
أَيْ confirmation
تْفَضَّلْ politesse
خُويَا nomination
. Point
مْعَ etiq
وَقْتَاشْ outil question demande horaire
بِاللهْ demande
التْرَانْ marq train
يِمْشِي marq depart
؟ Point_Interrogation
donc le resultat sera donc :
Confirmation + Politesse + Nomination
Vide + Question + Demande + Train + Depart
au lieu de
Confirmation + Politesse + Nomination + Vide + Question + Demande + Train + Depart
Marsh Posté le 10-10-2013 à 11:37:49
Donc clairement il va falloir remplacer le
unless ($h2{$h1{$words[0]}} ~~ "Ponctuation" ) {
push @bloc, $h2{$h1{$words[0]}};
}
par un
if ($h2{$h1{$words[0]}} ~~ "Ponctuation" ) {
push @bloc, "\n";
}
else {
push @bloc, $h2{$h1{$words[0]}};
}
je pense.
A+,
Marsh Posté le 10-10-2013 à 11:53:54
bonjour,
oui cous avez raison sauf que il ya un signe "+" de plus à la fin et au début de chaque ligne
Confirmation + Politesse + Nomination +
+ Vide + Question + Demande + Train + Depart +
+ ??? + Politesse + Nomination +
??? + Politesse + Nomination +
Marsh Posté le 10-10-2013 à 13:23:45
En effet. Dans ce cas la, ceci devrait faire l'affaire:
if ($h2{$h1{$words[0]}} ~~ "Ponctuation" ) {
my $truc = pop @bloc;
$truc = $truc . "\n";
push @bloc, $truc;
}
.....
Et il faudra éventuellement tenir compte du cas ou @bloc est vide (tester si ça passe ainsi ou s'il faut un test spécifique et du code pour en tenir compte).
A+,
Marsh Posté le 10-10-2013 à 13:50:07
j'ai testé juste le signe "+" à la fin sont enlevé , ainsi il ya des lgnes vide
voici le resultat :
Confirmation + Politesse + Nomination
+ Vide + Question + Demande + Train + Depart
+ ??? + ??? + ??? + ??? + Vide + Question + ??? + ??? + ???
+ ??? + Vide + Vide + ??? + ??? + ??? + ??? + ???
+ ??? + ??? + Vide + ??? + ??? + ??? + Demande + Tichet + ??? + ???
+ ??? + ??? + ??? + ???
+ ??? + ???
+ ??? + ??? + ??? + Question + Depart + ???
Marsh Posté le 10-10-2013 à 14:49:03
Ah, j'avais pas fait attention au fait que vous ne vouliez pas de + en début de ligne.
Dans ce cas la le plus simple est de positionner un flag $punc pour savoir qu'on a rencontré de la ponctuation:
@words = split /\s+/;
my $punct = 0;
.....................
if ($h2{$h1{$words[0]}} ~~ "Ponctuation" ) {
$punct = 1;
}
else {
my $truc;
if ($punct) {
$truc = pop @bloc;
$truc = $truc . "\n". $h2{$h1{$words[0]}};
$punct = 0;
}
else {
$truc = $h2{$h1{$words[0]}};
}
push @bloc, $truc;
}
Bon, c'est du code pas testé, mais ça donne l'idée.
A+,
Marsh Posté le 10-10-2013 à 20:12:07
le problème est resolu, mais y'a t'il un moyen d'eliminer les lignes vide ds la sortie
Marsh Posté le 10-10-2013 à 21:12:08
Je ferais
chomp;
s/^\s+|\s+$//g;
@words = split /\s+/;
...
et ça réglera peut être le problème.
A+,
Marsh Posté le 10-10-2013 à 23:54:48
Je ne peux pas vous en dire plus, les fichiers xml que vous me donnez en exemple, et en particulier fic3.xml, ne sont pas avec assez de données pour que je puisse faire des tests utiles.
A+,
Marsh Posté le 09-10-2013 à 23:43:26
Bonsoir,
j'ai le code suivant :
avec out33.txt
أَيْ confirmation
تْفَضَّلْ politesse
خُويَا nomination
. Point
مْعَ etiq
وَقْتَاشْ outil question demande horaire
بِاللهْ demande
التْرَانْ marq train
يِمْشِي marq depart
؟ Point_Interrogation
fic2.xml
<mot>
<synonyme>!</synonyme>
<etiquette>Point Exclamation</etiquette>
</mot>
<mot>
<synonyme> . </synonyme>
<etiquette>point</etiquette>
</mot>
<mot>
<synonyme>؟</synonyme>
<etiquette>Point_Interrogation</etiquette>
</mot>
<mot>
<synonyme>أَيْ</synonyme>
<etiquette>confirmation</etiquette>
</mot>
<mot>
<synonyme>تْفَضَّلْ </synonyme>
<etiquette>politesse</etiquette>
</mot>
et fic3.xml
<classe>
<nom> Depart </nom>
<etiquette1> marq depart</etiquette1>
</classe>
<classe>
<nom>Ponctuation </nom>
<etiquette1> Point_Exclamation </etiquette1>
<etiquette2> point </etiquette2>
<etiquette3> Point_Interrogation</etiquette3>
</classe>
...
la sortie de mon programme est la suivante :
Confirmation + Politesse + Nomination + Vide + Question + Demande + Train + Depart
comment puis je modifier le code pour avoir comme resultat :
Confirmation + Politesse + Nomination
Vide + Question + Demande + Train + Depart
Merci d'avance