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

Python Discussion :

Regex et sre_compile.py : sorry, but this version only supports 100 named groups


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Regex et sre_compile.py : sorry, but this version only supports 100 named groups
    Bonjour,

    Un collegue a moi a créé un script qui contient un regex, et lorsque je le lance j'obtient l'erreur :

    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
    Traceback (most recent call last):
      File "call_analyse.py", line 12, in <module>
        res =  an.analysephrase('la voiture blanche', 2)
      File "/path/analyse_methodes.py", line 56, in analysephrase
        resultat = analyseurdephrase.parser(sent,'cfg','lc')
      File "/path/nltksentparser_methodes.py", line 75, in parser
        tagger = nltk.RegexpTagger(self.pattern)
      File "/usr/local/lib/python2.7/dist-packages/nltk/tag/sequential.py", line 469, in __init__
        self._regexs = re.compile('|'.join(['(?P<%s>%s)' % (label, regex) for regex,label in regexps_labels]))
      File "/usr/lib/python2.7/re.py", line 190, in compile
        return _compile(pattern, flags)
      File "/usr/lib/python2.7/re.py", line 243, in _compile
        p = sre_compile.compile(pattern, flags)
      File "/usr/lib/python2.7/sre_compile.py", line 511, in compile
        "sorry, but this version only supports 100 named groups"
    AssertionError: sorry, but this version only supports 100 named groups
    Et je ne sais pas quoi faire.

    Et il utilise la bibliothèque NLTK.

    Par contre le script fonctionne sur son Windows avec python 2.6 et 2.7.3 alors que moi j'ai le 2.7.1 sous ubuntu.

    Merci

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    Par défaut
    Tu as dépassé une limite, en l’occurrence 100.

    Comment l'exécutes-tu?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    je fait : python call_analyse.py

    Mais ce qui est bisard c'est qu'il marche sur windows et sur un autre pc sous ubuntu.

    J'ai peu être mal installé un truc

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Pas forcément, ce genre d’options se définit à la compilation, en général, Ubuntu est simplement peut-être moins généreuse que celui qui compile la version windows…

    Ce qui serait intéressant, c’est de voir cette regex, parce que cent groupes, ça fait déjà beaucoup, je trouve…

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 442
    Points : 37 034
    Points
    37 034
    Par défaut
    Salut,

    Citation Envoyé par mont29 Voir le message
    Ce qui serait intéressant, c’est de voir cette regex, parce que cent groupes, ça fait déjà beaucoup, je trouve…
    Ben elle est donné dans le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "/path/nltksentparser_methodes.py", line 75, in parser
        tagger = nltk.RegexpTagger(self.pattern)
      File "/usr/local/lib/python2.7/dist-packages/nltk/tag/sequential.py", line 469, in __init__
        self._regexs = re.compile('|'.join(['(?P<%s>%s)' % (label, regex) for regex,label in regexps_labels]))
    Il n'est pas impossible que les "tags" soient construits à partir d'un fichier "texte" qui a mal vécu...

    Un collegue a moi a créé un script qui contient un regex, et lorsque je le lance j'obtient l'erreur :
    Votre collègue envoie du "garbage" à une API nltk.
    Il serait quand même intéressant de lui demander un avis: ce que vous nous montrez n'est qu'un effet de bord d'un "bug" dans son code.

    - W

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Woops*! Merci wiztricks, j’avais pas vu…

    Ben en fait, on se retrouve dans le cas classique du "(blah)|(foo)|(bar)|(xxx)|…", qui crée n groupes, alors qu’un seul suffit, "(blah|foo|bar|xxx|…)"*! Sauf qu’évidemment, on n’a plus accès à chaque possibilité sous un nom propre dans le dico de résultat.

    Faudrait contrôler la taille de self.pattern*!

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 442
    Points : 37 034
    Points
    37 034
    Par défaut
    Salut,

    Vu le comportement, je regarderais plutôt un problème de "end of line" et de d2u concernant le fichier qui sert à construire ces "tags" (pour autant qu'il existe).
    En tout cas, ce n'est pas encore un problème Python et seule les personnes qui ont écrit l'application (ou qui oseraient ouvrir le script pour essayer de comprendre ce qu'il fait) pourront poser de bonnes questions.

    - W

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci de m'aider

    en fait le code bug a l'appel de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tagger = nltk.RegexpTagger(self.pattern)
    la taille du pattern est de 108 et il contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [('\xe0', 'P'), ('zero', 'Fnum'), ('voiture', 'Nomcom'), ('vite', 'Fadj'), ('ville', 'Nomcom'), ('vieux', 'FnanQUA'), ('vente', 'Nomcom'), ('vente', 'Nomcom'), ('universit\xe9', 'Nomcom'), ('une', 'Fnum'), ('tu', 'Nompro'), ('trois', 'Fnum'), ('sale', 'Fnan'), ('r\xe9gion', 'Nomcom'), ('rouge', 'ACoul'), ('rire', 'Vinf'), ('rectoral', 'FadjREL'), ('rapide', 'FadjQUA'), ('pr\xe9sidentielle', 'FadjREL'), ('pr\xe9sidentiel', 'FadjREL'), ('propre', 'Fnan'), ('produit', 'Nomcom'), ('peu', 'Wqua'), ('petit', 'FnanQUA'), ('personne', 'Nomcom'), ('pas', 'Ppas'), ('particuli\xe8rement', 'Waaj'), ('parler', 'Vinf'), ('par', 'P'), ('nulle', 'Dneg'), ('nul', 'Dneg'), ('nombreux', 'FadjQUA'), ('nombreuses', 'FadjQUA'), ('m\xe9chant', 'Fnan'), ('mosa\xefque', 'Nomcom'), ('mince', 'FnanQUA'), ('manger', 'Vinf'), ('maison', 'Nomcom'), ('mai', 'Nomcom'), ('l\xe0', 'LA'), ('leurs', 'Ddef'), ('leur', 'Ddef'), ('les', 'Ddef'), ('lent', 'FadjQUA'), ('le', 'Ddef'), ('laid', 'Fnan'), ('la', 'Ddef'), ('jeune', 'FnanQUA'), ('je', 'Nompro'), ('janvier', 'Nomcom'), ('indiscret', 'Fadj'), ('incomplet', 'FnanQUA'), ('ils', 'Nompro'), ('il', 'Nompro'), ('hurler', 'Vinf'), ('haut', 'FnanQUA'), ('gros', 'FnanQUA'), ('grand', 'FnanQUA'), ('gramme', 'unite-de-mesure'), ('gentil', 'Fnan'), ('gare', 'Nomcom'), ('froid', 'Fnan'), ('franche', 'Fadj'), ('franc', 'Fadj'), ('faire', 'Vinf'), ('et', 'C'), ('en', 'P'), ('elles', 'Nompro'), ('elle', 'Nompro'), ('d\xe9testable', 'Fadj'), ('discret', 'Fadj'), ('directeur', 'Nomcom'), ('deux', 'Fnum'), ('de', 'Pde'), ('dans', 'P'), ('conduire', 'Vinf'), ('complet', 'FnanQUA'), ('col\xe8re', 'Nomcom'), ('ci', 'CI'), ('chocolat', 'Nomcom'), ('chef', 'Nomcom'), ('chaud', 'Fnan'), ('cette', 'Ddef'), ('carottes', 'Nomcom'), ('cantine', 'Nomcom'), ('bleue', 'ACoul'), ('blanche', 'ACoul'), ('blanc', 'ACoul'), ('beaucoup', 'Wqua'), ('beau', 'Fnan'), ('bas', 'FnanQUA'), ('avec', 'P'), ('aucune', 'Dneg'), ('aucun', 'Dneg'), ('aimable', 'Fadj'), ('a', 'Vaux'), ('^[0-9]+(.[0-9]+)?$', 'K'), ('Une', 'Fnum'), ('Trois', 'Fnum'), ('Pierre', 'Nomprp'), ('Milka', 'Nomprp'), ('Leurs', 'Ddef'), ('Leur', 'Ddef'), ('Les', 'Ddef'), ('Le', 'Ddef'), ('La', 'Ddef'), ('Deux', 'Fnum'), ('Citro\xebn', 'Nomprp')]
    par contre je debute et je ne sais pas a quoi correspond les tags.


    Merci !!!

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    j'ai fais un print de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '|'.join(['(?P<%s>%s)' % (label, regex) for regex,label in regexps_labels])
    et j'obtient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?P<g0>�)|(?P<g1>zero)|(?P<g2>voiture)|(?P<g3>vite)|(?P<g4>ville)|(?P<g5>vieux)|(?P<g6>vente)|(?P<g7>vente)|(?P<g8>universit�)|(?P<g9>une)|(?P<g10>tu)|(?P<g11>trois)|(?P<g12>sale)|(?P<g13>r�gion)|(?P<g14>rouge)|(?P<g15>rire)|(?P<g16>rectoral)|(?P<g17>rapide)|(?P<g18>pr�sidentielle)|(?P<g19>pr�sidentiel)|(?P<g20>propre)|(?P<g21>produit)|(?P<g22>peu)|(?P<g23>petit)|(?P<g24>personne)|(?P<g25>pas)|(?P<g26>particuli�rement)|(?P<g27>parler)|(?P<g28>par)|(?P<g29>nulle)|(?P<g30>nul)|(?P<g31>nombreux)|(?P<g32>nombreuses)|(?P<g33>m�chant)|(?P<g34>mosa�que)|(?P<g35>mince)|(?P<g36>manger)|(?P<g37>maison)|(?P<g38>mai)|(?P<g39>l�)|(?P<g40>leurs)|(?P<g41>leur)|(?P<g42>les)|(?P<g43>lent)|(?P<g44>le)|(?P<g45>laid)|(?P<g46>la)|(?P<g47>jeune)|(?P<g48>je)|(?P<g49>janvier)|(?P<g50>indiscret)|(?P<g51>incomplet)|(?P<g52>ils)|(?P<g53>il)|(?P<g54>hurler)|(?P<g55>haut)|(?P<g56>gros)|(?P<g57>grand)|(?P<g58>gramme)|(?P<g59>gentil)|(?P<g60>gare)|(?P<g61>froid)|(?P<g62>franche)|(?P<g63>franc)|(?P<g64>faire)|(?P<g65>et)|(?P<g66>en)|(?P<g67>elles)|(?P<g68>elle)|(?P<g69>d�testable)|(?P<g70>discret)|(?P<g71>directeur)|(?P<g72>deux)|(?P<g73>de)|(?P<g74>dans)|(?P<g75>conduire)|(?P<g76>complet)|(?P<g77>col�re)|(?P<g78>ci)|(?P<g79>chocolat)|(?P<g80>chef)|(?P<g81>chaud)|(?P<g82>cette)|(?P<g83>carottes)|(?P<g84>cantine)|(?P<g85>bleue)|(?P<g86>blanche)|(?P<g87>blanc)|(?P<g88>beaucoup)|(?P<g89>beau)|(?P<g90>bas)|(?P<g91>avec)|(?P<g92>aucune)|(?P<g93>aucun)|(?P<g94>aimable)|(?P<g95>a)|(?P<g96>^[0-9]+(.[0-9]+)?$)|(?P<g97>Une)|(?P<g98>Trois)|(?P<g99>Pierre)|(?P<g100>Milka)|(?P<g101>Leurs)|(?P<g102>Leur)|(?P<g103>Les)|(?P<g104>Le)|(?P<g105>La)|(?P<g106>Deux)|(?P<g107>Citro�n)
    Il y a des erreur d'encodage je crois, dans mon terminal il y a des � ( &#65533 dans le code au dessus )

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 940
    Points : 7 350
    Points
    7 350
    Par défaut
    la taille du pattern est de 108 et il contient :
    Non mais pas la peine d'aller plus loin, tu dépasses les 100 groupes autorisés.

    Tu dois donc faire en sorte d'avoir grand maximum 100 groupes, vires en 8, et tu verras le résultat.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    C'est ca la problème, on a testé le code sur sa machine windows avec python 2.7 et 2.6 ainsi que sur un autre pc sous ubuntu 11.10 avec python 2.7 et moi sur ma 11.04 sa marche pas avec python 2.7

    J'avais essayé de raccourcir la liste mais je vais réssailler.

    Merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/06/2013, 12h26
  2. [REGEX] Comment extraire les named groups avant le match ?
    Par vmolines dans le forum Framework .NET
    Réponses: 0
    Dernier message: 08/07/2011, 11h26
  3. Réponses: 4
    Dernier message: 30/10/2009, 17h04
  4. Réponses: 0
    Dernier message: 30/10/2007, 02h50
  5. Réponses: 11
    Dernier message: 10/11/2006, 12h28

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