[Perl] Module pour parser des parenthèses imbriquées

Dami Laurent (PJ) laurent.dami at justice.ge.ch
Lun 18 Déc 10:58:36 CET 2017


Salut,

Tu peux définir une grammaire complète avec https://metacpan.org/pod/Regexp::Grammars , mais ça demande un investissement non négligeable pour l'apprentissage.
Sinon s'il ne s'agit que de paires de parenthèses, il y a https://metacpan.org/pod/Regexp::Common::balanced  ou https://metacpan.org/pod/Text::Balanced 

Bon travail, Laurent Dami

-----Message d'origine-----
De : perl-bounces at mongueurs.net [mailto:perl-bounces at mongueurs.net] De la part de Stéphane Gigandet
Envoyé : lundi 18 décembre 2017 10:41
À : Liste francophone pour les questions générales sur Perl
Objet : [Perl] Module pour parser des parenthèses imbriquées

Bonjour,

Pour Open Food Facts j'essaie de parser des listes d'ingrédients qui 
ressemblent à ça :

"farine (12%), chocolat (beurre de cacao (15%), sucre [10%], protéines 
de lait, oeuf 1%) - émulsifiants : E463, E432 et E472 - correcteurs 
d'acidité : E322/E333 E474-E475, acidifiant (acide citrique, acide 
phosphorique) - sel"

Que j'essaie de transformer en arbre comme :

[
     {ingredient=>'farine', percent => 12},
     [ingredient=>'chocolat', ingredients => [
         {ingredient:'beurre de cacao', percent=>15},
         {ingredient:'sucre', percent=>10},
         {ingredient:'protéines de lait'},
         {ingredient:'oeuf', percent=>1},
     ]},
     {ingredient=>'émulsifiants', ingredients => [
         {ingredient=>'E463'},
         {ingredient=>'E432'},
         {ingredient=>'E472'},
     ]},
...

Pour l'instant j'ai du code à base de regexp avec une fonction 
récursive, mais c'est très laid et ça marche pas très bien :
https://github.com/openfoodfacts/openfoodfacts-server/blob/master/lib/ProductOpener/Ingredients.pm#L251

Je suis sûr qu'il y a des modules qui peuvent faire ce genre de trucs 
très bien, vous en connaissez ?

Merci beaucoup,

Stéphane



_______________________________________________
Perl mailing list
Perl at mongueurs.net
http://listes.mongueurs.net/mailman/listinfo/perl


Plus d'informations sur la liste de diffusion Perl