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

Stéphane Gigandet biz at joueb.com
Lun 18 Déc 10:41:27 CET 2017


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





Plus d'informations sur la liste de diffusion Perl