[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