rim_enis j'aime ENIS | Bonjour Tout le monde,
Je débute en perl , j'ain un fichier sous cette forme : حَتَّى Mot-Outil شَيْ Negation رَاهُو Mot-Outil بِاللَاهِي Marqueur-Politesse يْعَيْشِكْ Marqueur-Politesse شُوفْلِي Demande وَ Coordination إِلَّا Mot-Outil إِبْعَثْنِي Marqueur-Envoyer لِشْكُونْ Outil-Question يْحِلِّي Marqueur-Ouvrir مُشْكِلْتِي Marqueur-Probleme شُوفْ Marqueur-Voir et ma base prend la forme suivante : <mot>
<synonyme> مَكْتَبْ</synonyme>
<etiquette>Mot-Objet</etiquette>
</mot>
<mot>
<synonyme> عْمِلْتْ</synonyme>
<etiquette>Marqueur-Faire</etiquette>
</mot>
<mot>
<synonyme> الشَافْ</synonyme>
<etiquette>Mot-Chef</etiquette>
</mot>
<mot>
<synonyme> فَسَّرْلِي</synonyme>
<etiquette>Marqueur-Expliquer</etiquette>
</mot>
mon but est d'extraire tous les Y qui ont une etiquette X voila mon code :
Code :
- use strict;
- use warnings;
- use autodie;
- use XML::TreeBuilder;
- my %h1;
- my $tree = XML::TreeBuilder->new();
- $tree->parse_file('/home/hp/Bureau/Master/fic2.xml');
- my @mots = $tree->find('mot');
- foreach (@mots) {
- my ($synonyme, $etiquette);
- foreach ($_->descendants()) {
- my $tag = $_->tag();
- if ($tag ~~ "synonyme" ) {
- $synonyme = ($_->content_list())[0];
- }
- if ($tag ~~ "etiquette" ) {
- $etiquette = ($_->content_list())[0];
- $h1{$synonyme} = $etiquette;
- }
- }
- }
- $tree->delete;
- open my $fh, "<:utf8", '/home/hp/Bureau/Master/toto.txt';
- open my $fh1, ">:utf8", '/home/hp/Bureau/Master/resultatML.txt';
- open my $fh2, ">:utf8", '/home/hp/Bureau/Master/essai10.txt';
- my $linenum = 0;
- my (@bloc, @words);
- foreach(<$fh> ) {
- unless ($linenum++ or not /^\x{feff}/) {
- s/^\x{feff}// ;
- }
- if (/^\s*$/) {
- if (0+@bloc) {
-
- #print $fh2 join(" + ", @bloc), "\n";
- @bloc = ();
- }
- }
- #sinon
- else {
- #On vire les espaces en début et en fin
- s/^\s+|\s+$//g;
- #On découpe la ligne comme des mots séparés par des espaces
- @words = split /\s+/;
- if (defined($h1{$words[0]}) and defined($h2{$h1{$words[0]}})) {
- if ( $h1{$words[0]} ~~ "Mot-Chef" ) {
- push @bloc, "$words[0]\n";
- }
- }
- else {
- # push @bloc, "???";
- }
- }
- }
- if (0+@bloc) {
- print $fh2 join("\n", @bloc), "\n";
- }
- close $fh;
|
le problème c'est que je ne sais pas pkoi il y a des mots qui possède comme etiquette "Mot-Chef" mais qui n'apparaissent pas dans mon fichier resultat !!
plz si quelqu'un peut m'aider je serais très reconnaissante !!!! |