IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Pb pour parcourir et comparer les fichiers xml


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut Pb pour parcourir et comparer les fichiers xml
    Bonjour,
    S'il vous plait j'en ai besoin de vos aide je dois écrire un script qui me permet de générer les phonèmes de chaque mots (graphèmes) d'un corpus sous forme xml.
    J'ai un corpus sous forme XML qui contient des mots et les caractères qui le composent et leur type. et j'ai aussi un autre fichier xml qui contient des règles de phonétisation et un autre fichier qui contient les mots d'exception (pour cette fichier j'ai résolu le problème).
    Je dois parcourir mon corpus et pour chaque mots je dois parcourir la base des règles tout en prenant en considértion le Graph et le contexte gauche et droite s'il on utile ou nn et pour chaque graphéme je prend son remplacement et enfin je fait la concaténation pour avoir un mot complet.
    Veuillez trouvez ci-joint les fichiers xml que j'ai utiliser
    et voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    #!/usr/bin/perl
     
    use XML::Twig;
    use File::Spec;	
     
    #-----------------------------------------------------------
    #                     MAIN
    #-----------------------------------------------------------
     
    #Déclaration des fichiers Xml: 
    my $goodFileXML = 'D:\\Memoire Mastere\\Script\\Script_final\\Script_Grapheme-phoneme\\output.xml';
    my $goodFileXML1 = 'D:\\Memoire Mastere\\Script\\Script_final\\Script_Grapheme-phoneme\\RegleDePhonetisation.xml';
    my $goodFileXML2 = 'D:\\Memoire Mastere\\Script\\Script_final\\Script_Grapheme-phoneme\\BaseException.xml';
     
    #Déclaration du fichier résultat
    my $RepBase = 'D:\\Memoire Mastere\\Script\\Script_final\\Script_Grapheme-phoneme';
    my $FicAraOut1 = File::Spec->catfile( $RepBase, 'outregless.txt' );
    open (OUT_Aran, '+>:encoding(UTF-8)', $FicAraOut1 ) or die "Impossible ouvrir fichier $FicAraOut1 en sortie\n"; 
     
     
    #Tableau qui contient tous les caractéres des mots du fichier output.xml
    @tabcar=();
    $size=scalar(@tabcar);
     
    $i,$j;
     
    #Tableau qui contient tous les types des caractéres des mots du fichier Output.xml
    @tabtype=();
    $sizes=scalar(@tabtype);
     
    #Tableau qui contient tous les régles du fichier RegleDePhonetisation.xml
    @tabregle=();
    $sizer=scalar(@tabregle);
     
    #Tableau qui contient tous les régles du fichier RegleDePhonetisation.xml
    @tabexcep=();
    $sizee=scalar(@tabexcep);
     
    print OUT_Aran "Grapheme :"," Phoneme : \n";
     
    #Appel des fonctions
    my $twig = new XML::Twig( Twig_handlers => { 'Mot' => \&Mot, }, );
    print "Output.xml \n";
    $twig->parsefile($goodFileXML);
     
    @tabout=<OUT_Aran>;
    $size1 = scalar(@tabout);
     
     
     
     
     
    #-----------------------------------------------------------#
    #  *********************Fonctions**********************     #
    #-----------------------------------------------------------#
     
     
     
    #-----------------------------------------------------------
    # On récupére les données du Output.xml
    #-----------------------------------------------------------
    sub Mot
    {
    my $twig2= new XML::Twig;
    $twig2->parsefile($goodFileXML2);    
    my $root= $twig2->root;    
    my @Exception= $root->children;
     
    my $twig3= new XML::Twig;
    $twig3->parsefile($goodFileXML1);    
    my $root3= $twig3->root;    
    my @regle= $root3->children;   
     
     
    ($twig,$mot)= @_; 
     
       foreach  $TwmotFils( $mot->att('Nom')) 
        { 
            foreach $Exception (@Exception) 
           {  
    		    if ($TwmotFils eq $Exception->first_child('Grapheme')->text())
    			   {
    				   print "comapraison:",$e,"\n";
    			       print OUT_Aran $mot->att('Nom'),"     ",$Exception->first_child('Phoneme')->text(),"\n";
    			   }
     
    		}	
       }
     print OUT_Aran $mot->att('Nom'),"\n";  
     
      foreach  $TwmotFils( $mot->att('Nom')) 
        {   
            foreach $TwcarFils  ($mot->children('caractere'))
    	    { 
    			foreach $regle (@regle)
    		    { 
                    foreach $TwregleFils  ($regle->children('Composant'))
    			    {   
                        if ($TwregleFils->att('Nom') eq  "Graph")
    				    {   
    						if ($TwregleFils->text() eq $TwcarFils->text())
    						{
    						    print "Coprs du boucle if 2 \n";
    					        @tabregle=($TwcarFils->text());
    					        @tab=($regle->last_child('Composant')->text());    
    					    }
    				    }   
    		        }
    			}
            }
        }
    for $i (0..$sizer)		 
    {
        print OUT_Aran  $tabregle[$i],"   ";
    } 
    for $j (0..$#tab) 
    {
    print OUT_Aran  $tab[$j]," ";
    }
     
    print OUT_Aran "\n";
    print "fin du fonction regle\n"; 	
    }
    et voici le fichier resultat que je veux obtenir:

    أَيْ ?ai:
    تْفَضَّلْ tfad_?\d_?\al
    خُويَا xuu:i:aa
    مْعَ m?\a
    وَقْتَاشْ u:aqtaaS
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    est-ce qu'il y'a quelqu'un qui peut m'aider

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ne sois pas impatient, nous ne sommes pas scotché nuit et jour sur le forum pour voir si une nouvelle question tombe.

    Deux points.

    Tu ne dis pas ce qui ne fonctionne pas dans ton programme. Ce serait bien que tu l'expliques. (Je vois bien des tas de choses à améliorer, mais je ne sais pas quel est ton problème.) D'autant que comme il n'y a pas de fichier en entrée, on ne peut pas essayer de tester.

    Comme je ne connais pas l'arable, ton exemple ne m'est d'aucune utilité pour comprendre ce que tu veux faire.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Merci Lolo78 pour votre réponse,
    J'ai en pièce jointe les fichiers que j'en ai besoin. Mon problème est que je n'arrive pas à récupérer pour chaque caractère le phonème correspondant tout en respectant sa position dans le mots, et tout en suivant les règles qui se trouve dans le fichier "Régledephonétisation"

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Oups, pardon, je n'avais pas vu les pièces jointes, DSL, au temps pour moi.

    OK, je jette un coup d’œil.

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    OK, bon j'ai regardé les pièces jointes puis regardé à nouveau ton code, je comprends mieux ce dont il s'agit.

    Mais n'ayant jamais utilisé le module Twig, je ne comprends pas ce que font les différentes méthodes que tu appelles et donc ne comprends pas ton algorithme. Je ne peux vraiment pas t'aider. J'en suis désolé.

    Pour aider d'autres personnes à t'aider, je suggère néanmoins que tu expliques plus précisément pourquoi ton code ne te convient pas: que fait-il qu'il ne devrait pas faire ou que ne fait-il pas qu'il devrait faire?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Merci Lolo78,
    Ok je vais essayer d'expliquer de plus mon probléme

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Je suis débutante en perl, et j'ai chercher des scripts pour faire le parser du fichier xml c'est pour cela j'ai utiliser le xml::twig
    Comme j'ai déja dis j'ai trois fichiers xml, je vais parcourir le fichier "output" et pour chaque mot je vais parcourir le fichier "Exception" et vérifier est ce que ce mot existe ou nn, s'il existe je vais afficher son phonéme sinon je vais parcourir le fichier "régledephonétisation", et on suivant les régles de prononciation de vais extraire les remplacment correspondant et les concaténer ensemble pour avoir le phonéme correspondant de chaque mot de l'output. j'espére que c'est plus clair mon probléme
    Merci de m'aider

  9. #9
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonsoir Bayouta,

    Comme je te l'ai déjà dit, je ne connais pas Twig et ne peux t'aider sur l'utilisation de ce module, mais je suis complètement persuadé que tu as parfaitement raison d'utiliser des modules existants, développés par des spécialistes accomplis et abondamment testés, plutôt que de chercher réinventer toi même ce qui existe déjà. Surtout s'agissant de Twig qui est très très réputé.

    D'une façon générale, la bonne technique pour résoudre le genre de problème que tu as consiste à lire au début tes fichiers de paramétrage (les exceptions et les phonèmes, en l'occurrence), avec Twig, donc, et à les charger en mémoire, très probablement dans des hashes. Puis, tu lis séquentiellement ton fichier en entrée, tu vérifies pour chaque mot de ce fichier dans tes hashes s'il existe et effectue les substitutions nécessaires. De cette façon, le traitement peut être très rapide même avec des données volumineuses, car chaque fichier n'est lu séquentiellement qu'une seule fois, et une recherche dans un hash est extrêmement rapide.

    Je n'utilise presque jamais XML, d'où ma méconnaissance de Twig, mais je peux te dire que le reste du processus décrit (charger des "dictionnaires" en mémoire avant de traiter un fichier texte) est quelque chose que je fais extrêmement fréquemment, et souvent avec des données en entrée très volumineuses (des gigaoctets). L'an dernier, nous avions lancé au boulot un programme dont, après 3 ou 4 jours de traitement, la durée d'exécution pouvait être estimée à 60 jours, ce qui était inacceptable (un délai de 3 à 5 jours était le maximum tolérable pour que les données générées soient réellement utiles, au-delà leur âge les rendait inexploitable). J'ai ré-écrit le programme selon les lignes ci-dessus, à savoir un chargement des données de paramétrage dans des hashes (en fait des hashes de hashes et des hashes de hashes de hashes dans ce cas particulier, mais peu importe ces détails), et j'ai ramené la durée d'exécution à environ 13 heures. Cela te montre l'efficacité de cette méthode.

    Tu pourras voir des exemples de cette méthode dans ce post, surtout dans les discussions de ces dernières semaines entre Etoile de mer, Philou et moi à partir de la page 3 ou 4 du fil (les discussions à partir de mars 2013).

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonjour Lolo78,
    Merci pour votre réponse.
    J'ai vu les autres conversations, mais comme je suis stressé par le temps, car je dois remettre le script final ce soir, j'ai pas pu me concentrer et j'ai aucune une idée,tout est flou pour moi Donc est ce que vous pouvez me donner une idée comment je peux charger mon fichier xml dans un hash
    et merci d'avance

  11. #11
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour Bayouta,

    compte tenu des délais et du fait que je ne connais pas les modules pour parser du XML, je peux au mieux te proposer une très mauvaise approche, que je ne recommande en principe vraiment pas, mais c'est probablement ce que je ferais si je devais respecter des délais aussi serrés: utiliser des expressions régulières pour parser ton XML (@ tous: pas taper, j'ai bien dit que je ne propose cette approche que faute de mieux dans l'immédiat).

    Donc, si tu veux charger ton fichier d'exceptions dans un hash, tu peux faire quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    my %exceptions;
    my $graph;
    my $fic_exception = "Exceptions.xml";
    open my $EXC, "<", $fic_exception or dir "Ouverture impossible du fichier $fic_exception $! \n";
    while (<$EXC>) {
    	$graph = $1 if /<Grapheme>([^<]+)<\/Grapheme>/;
    	if ( /<Phoneme>([^<]+)<\/Phoneme>/ ) {
    		$exceptions{$graph} = $1;
    	}
    }
    close $EXC;
    # les exceptions sont maintenant chargées dans le hash %exceptions. Continuer en lisant le fichier des règles
    L'expression régulière "([^<]+)" reconnaît une suite aussi longue que possible de caractères quelconques différents de "<"

    Encore une fois, cette solution est vraiment un pis-aller. D'ailleurs, si tu l'adoptes, tu constateras qu'elle est bien plus difficile à mettre en œuvre pour tes autres fichiers, donc la structure est plus complexe.

  12. #12
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour bayouta19,
    Suite à ton MP j'ai regardé ta question.
    Juste une mise au point, je ne maîtrise pas l'arabe, je l'apprends et suis débutant... Dans les fichiers que tu joins il y a des lettres inconnues de l'arabe classique, il doit s'agir de Farsi (persan).
    Mais peu importe à ce niveau.
    Idem je ne connais pas XML::Twig , j'ai regardé rapidement le CPAN, j'ai essayé de mettre à jour ma base mais sans succès pour l'instant.
    Ceci dit il faut bien sûr utiliser ce module pour parser tes fichiers qui sont en xml.

    J'ai bien compris la problématique à partir des fichiers joins, le traitement des voyelles longues et courtes suivant qu'elles sont précédées de consonnes solaires ou lunaires... mais c'est là ne prendre qu'une toute petite partie du problème. La chose est d'autant plus complexe qu'en général, en dehors des textes religieux, les voyelles courtes ne sont pas notées...

    Il est impossible dans un délais aussi court et même beaucoup plus long d'écrire un programme de phonétisation arabe en n'en connaissant que quelques bribes, d'autant qu'il existe là aussi plusieurs modules, une pléthore en fait, mais dont un au moins fait référence : Encode::Arabic
    Par curiosité je t'invite à jeter un coup d’œil au .pm pour avoir une idée de la complexité de la chose...

    Personnellement je me suis borné à seulement supprimer les voyelles courtes pour m'entrainer justement à lire sans.

    Je comprends que tu aies besoin d'une transcription (translittération) spécifique, personnellement je suis incapable de l'écrire !
    Désolé, et surtout bon courage !

  13. #13
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour Bayouta,

    voici une solution pour la construction du hash pour stocker les règles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    my %regles;
    my ($graph, $cd, $cg);
    my $fic_regles = "Regles.xml";
    open my $RULES, "<", $fic_regles or die "Ouverture impossible du fichier $fic_regles $! \n";
    while (<$RULES>) {
    	$cd = $1 if /<Composant Nom="C-Droit" Utilite="Oui">([^<]+)<\/Composant>/; # $cd sera undef si utilite = non
    	$graph = $1 if /<Composant Nom="Graph">([^<]+)<\/Composant>/;
    	$cg = $1 if /<Composant Nom="C-Gauche" Utilite="Oui">([^<]+)<\/Composant>/;
    	if ( /<Composant Nom="Remplacement">([^<]+)<\/Composant>/ ) {
    		my $repl = $1;
    		# on va créer une clef de hash en concaténant $cd, $cg et $graph (avec séparateur) si ces élements sont définis
    		if (defined $cd) {
    			if (defined $cg) {
    				$regles{$cd . '|' . $graph . '|' . $cg} = $repl;
    			} else {
    				$regles{$cd . '|' . $graph} = $repl;
    			}
    		}
    		else {
    			if (defined $cg) {
    				$regles{ $graph . '|' . $cg} = $repl;
    			} else {
    				$regles{$graph} = $repl;
    			}
    		}
    		undef $cd;
    		undef $cg;
    	}
    }
     
    close $RULES;
    # les regles sont maintenant chargées dans le hash %regles
    Si je teste avec le fichier de règles simplifié suivant (j'ai remplacé les graphèmes arabes par des trucs que je maîtrise, toto et tutu ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
          <Regle  Num="1">
    	      <Composant Nom="C-Droit" Utilite="Oui">CL</Composant>
    		  <Composant Nom="Graph">toto</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">u</Composant>
          </Regle>
     
    	  <Regle  Num="2">
    	      <Composant Nom="C-Droit" Utilite="Oui">CS</Composant>
    		  <Composant Nom="Graph">toto</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">u</Composant>
           </Regle>
     
    	   <Regle  Num="3">
    	      <Composant Nom="C-Droit" Utilite="Oui">C</Composant>
    		  <Composant Nom="Graph">toto</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">u</Composant>
           </Regle>
     
          <Regle  Num="4">
    	      <Composant Nom="C-Droit" Utilite="Oui">CL</Composant>
    		  <Composant Nom="Graph">tutu</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">a</Composant>
           </Regle>
     
    	   <Regle  Num="5">
    	      <Composant Nom="C-Droit" Utilite="Oui">CS</Composant>
    		  <Composant Nom="Graph">tutu</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">a</Composant>
           </Regle>
    le code me construit le hash suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    0  'CL|tutu'
    1  'a'
    2  'C|toto'
    3  'u'
    4  'CS|toto'
    5  'u'
    6  'CS|tutu'
    7  'a'
    8  'CL|toto'
    9  'u'
    Pour utiliser ce hash (et dans la mesure où j'ai compris ce que tu veux faire) il faut, pour chaque graphème trouvé, faire successivement les recherches suivantes dans le hash (en s'arrêtant dès que l'on a trouvé quelque chose) et vériffier que le hash est defini pour les clefs suivantes:
    CD|graph|CG
    CD|graph
    graph|CG
    graph

    Dès que l'on a trouvé, on prend la valeur trouvée dans le hash pour le remplacement.

    J'ajoute qu'en testant ce code, je me suis aperçu qu'il y avait deux petites erreurs dans le code que j'avais donné pour les exceptions, je corrige directement dans le post concerné.

    Voilà, je t'ai donné le code pour créer tes deux hash, il n'y a plus qu'à t'en servir pour parser ton corpus et effectuer les remplacements voulus.

  14. #14
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Hum, je constate que tu n'as pas répondu depuis environ 12 heures.

    Tu étais désespérée d'avoir de l'aide et de faire ton script pour aujourd'hui, samedi, et pas la moindre réponse depuis 11h57.

    C'est un peu décevant. J'ai essayé de te donner des éléments de réponse pour t'aider (et j'ai passé un peu de temps à la faire, pas énorme, mais, tout de même). Mais aucune réponse de ta part.

    Voyant que tu avais envoyé un MP à Dmganges, je me suis dit que tu avais des difficultés et ai décidé d'essayer de de te donner une nouvelle aide.

    Résultat, toujours zéro réponse de ta part.

    J'espère sincèrement que tu as trouvé la solution, mais ça aurait été sympa de répondre à ceux qui ont essayé de t'aider.

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonjour Lolo78,
    Je suis vraiment désolé j'ai vu votre réponse et je l'ai essayé et je suis vraiment reconnaissante , et je respecte votre effort et votre temps que vous avez consacré pour m'aider, mais ici à Tunis la connexion est trop lente :'( surtout les samedi .Je suis vraiment désolé une autre fois
    Merci pour vos aide vous les deux Michel et Lolo78

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bonjour,

    Bon, j'ai jeté un coup d’œil à ton programme. Il y a plusieurs choses qui me dérange et qui ne donne malheureusement pas envie de chercher plus loin.
    1. les variables ne sont pas déclarées ;
    2. le choix du nom des variables est douteux, ce qui ne facilite pas la lecture ;
    3. l'indentation reste à désirer ;
    4. tu n'utilise pas use strict et use warnings; ;
    5. ...


    Ensuite, tes fichiers XML BaseExeption et Regle sont petit, donc tu peux les lire une seule fois et les mettre dans un hash ou deux hash.
    Puis tu lit ton fichier output pour faire tes correspondances.

    Pour être plus clair, il faudrait un exemple de résultat que tu souhaites obtenir.

  17. #17
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonsoir djibril,
    Comme j'ai déjà dis je suis débutante en perl, et j'ai chercher et pauser des questions pour arriver à ce script là,
    J'ai utiliser la solution du Lolo78, qui consiste à remplir les deux fichier dans un hash mais lorsque j'affiche le hash il m'affiche les caractère arabes avec des symboles bisard seulement ceux qui sont écrits en français!!
    Voici le résultat que je veux obtenir
    Graphème Phonème
    أَيْ ?ai:
    تْفَضَّلْ tfad_?\d_?\al
    خُويَا xuu:i:aa
    مْعَ m?\a
    وَقْتَاشْ u:aqtaaS

  18. #18
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    JE veux bien t'aider, mais je ne comprends rien à la langue arabe, donc pour ton fichier de sorti d'exemple, faut être un peu plus clair pour que je puisse savoir comment tu as construit les deux premières lignes par exemple . D'où vient tel ou tel mot et de quel fichier.

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je vais essayer de résumer ce que j'ai compris de ton programme.
    Tu as un fichier output qui contient des mots et pour chaque mot, tu as des caractères :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       <Mot Num="0" Nom="أَيْ">
          <caractere type="CL">أ</caractere>
          <caractere type="VC">َ</caractere>
          <caractere type="CL">ي</caractere>
          <caractere type="VC">ْ</caractere>
       </Mot>

    Tu as un fichier BAse qui contient des exceptions (graphemes et phomenes) : je n'y comprends rien mais ce n'est pas important :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          <Exception  Num="1">
    	      <Grapheme>هَذَاكَ</Grapheme>
    		  <Phoneme>haaDaaka</Phoneme>
          </Exception>

    Tu as un fichier Regle qui contient des composants (dans des règles)
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          <Regle  Num="1">
    	      <Composant Nom="C-Droit" Utilite="Oui">CL</Composant>
    		  <Composant Nom="Graph">ُ</Composant>
    		  <Composant Nom="C-Gauche" Utilite="Non">*</Composant>
    		  <Composant Nom="Remplacement">u</Composant>
          </Regle>

    De ce que j'ai compris de ton programme, tu parcours chaque mot.
    Pour chaque mot :
    • tu cherches si son graphème existe. Si oui tu affiches le mot + espace + le Phonème


    Ensuite pour chaque mot, tu lis tous les caractères (balise caractere) et pour chacun, tu lis tous les composants de type Graph (fichier regle), et compare la valeur avec le caractère. Si ça correspond, tu l'affiches.

    J'ai bien résumé ?

  20. #20
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonjour Djibril,
    Oui c'est tous que je cherche
    Dans la base d'exceptions j'ai mis tous les mots qui ne suivent pas des règles de transcription.
    Et pour chaque mots dans mon corpus je vais parcourir la base d'exception et vérifier si elle existe ou non, si oui je vais afficher son phonème tout court si non je vais parcourir la base des règles et pour chaque caractère je veux vérifier selon le contexte gauche et droit du graphème et récupérer le phonème correspondant et après je fait la concaténation pour avoir le phonème complet de chaque mots

Discussions similaires

  1. [DOM] Parcourir les fichiers XML
    Par blackhock dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/05/2009, 08h45
  2. Réponses: 33
    Dernier message: 18/04/2009, 12h36
  3. outils pour comparer deux fichiers xml
    Par donny dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/03/2008, 20h06
  4. [encoding] Problème pour les fichiers XML avec notepad
    Par lehamster dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/11/2006, 15h56
  5. Réponses: 1
    Dernier message: 10/09/2006, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo