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 :

Remplacement chaine exacte comportant des accents [Débutant(e)]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 43
    Points : 37
    Points
    37
    Par défaut Remplacement chaine exacte comportant des accents
    Bonjour,

    Je suis en difficulté avec les regex :
    je voudrais remplacer certains mots par des étiquettes du style <MOT>israélien</MOT>, mais le découpage ne se fait pas sur le mot exact. Dans mon texte, j'ai «israélien» et «lien», ce qui fait un découpage israé<MOT>lien></MOT> au lieu de <MOT>israélien></MOT> !!
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    texte = "espagnol et israélien. Voici le lien."
    mots = ["espagnol","israélien","lien"]
    for mot in mots:
          avant = r''\b''+mot+r''\b''
          apres = r''<MOT>''+mot+r''</MOT>''
    texte = re.sub(avant,apres,texte)
    print texte
    Est-il possible d'avoir un vrai découpage sur les mots ? Je pensais que les \b suffisaient pour ne pas avoir de problèmes. Si je supprime l'accent sur israélien, il n'y a plus de problème donc c'est sûrement l'accent qui bloque. Mais je ne vois pas comment faire...

    Merci à vous

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ajoute une espace avant 'lien' pour le différencier de la fin de 'israélien'.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 43
    Points : 37
    Points
    37
    Par défaut
    Bonjour et merci pour ta réponse.

    J'ai tenté l'espace, ça marche pour l'exemple que j'avais donné mais comme les espaces ne sont pas toujours présent (oubli d'espaces après certains signes de ponctuation / titres / apostrophe "l'israélien"), ça coince de nouveau.

    J'ai vu que je pouvais faire un test pour savoir si la chaine était accentuée ou non avec isalpha() qui me renvoie FALSE pour les mots accentués.
    Du coup, ça me permet de faire un cas spécifique pour les mots accentués qui sont les seuls à poser problème.

    Je pensais détailler tous les cas possibles, mais quand je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    avant = r"\'"+mot+r"\b"    
    apres = r"\'<MOT>"+mot+r"</MOT>"

    pour le cas avec apostrophe, ça ne fonctionne pas (que je mette ou non le slash, le "r" ou le \b d'ailleurs)

    Si vous avez d'autres idées, merci beaucoup !!

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    J'ai essayé en ajoutant le flag unicode à la regex, et en préfixant les chaines d'un "u", et en jouant sur locale, mais ça ne fonctionne pas avec la version de la branche 2 (2.6). Un bug ?
    Par contre, ça fonctionne correctement avec la branche 3.

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu dois traiter chaque mot du texte par rapport à ta liste et non pas le contraire.

    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> texte = u"espagnol et israélien. Voici le lien."
    >>> mots = [u"espagnol", u"israélien", u"lien"]
    >>> tokens = texte.split()
    >>> for idx, l in enumerate(tokens):
    ...     if l in mots:
    ...             tokens[idx] = u"<MOT>%s</MOT>" % l
    ... 
    >>> text = u" ".join(tokens)
    >>> text
    u'<MOT>espagnol</MOT> et isra\xe9lien. Voici le lien.'
    montre le principe mais montre aussi le problème des mots qui finissent une phrase, ta liste de mots devrait donc aussi considérer les variantes avec point ou toute autre ponctuation et, éventuellement, majuscule ...etc.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Sinon, il suffit d'activer le flag re.U[NICODE] avec Python2.7.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $  python2.7
    Python 2.7.10 (default, Jan 15 2016, 14:56:07) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import re
    >>> txt = u"espagnol et israélien. Voici le lien."
    >>> for mot in [u"espagnol", u"israélien", u"lien"]:
    ...     txt = re.sub(ur'\b(%s)\b' % (mot), ur'<MOT>\1</MOT>', txt, flags=re.U)
    ... 
    >>> txt
    u'<MOT>espagnol</MOT> et <MOT>isra\xe9lien</MOT>. Voici le <MOT>lien</MOT>.'

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 43
    Points : 37
    Points
    37
    Par défaut
    Merci à tous les deux VinSs et Dardanos,

    Je retiens la dernière solution : ça fonctionne et pas besoin de spécifier les différents cas.
    Bref, super !!

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Envois d'email comportant des accents avec python
    Par tolliob dans le forum Général Python
    Réponses: 6
    Dernier message: 13/08/2015, 08h13
  2. [ODBC] Requete sql vers access impossible avec champ comportant des accents
    Par roxxsuxx dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/02/2012, 11h17
  3. [DW MX2004] Remplacement automatique des accents
    Par mandaillou dans le forum Dreamweaver
    Réponses: 9
    Dernier message: 10/07/2008, 15h31
  4. disparition des accents dans une chaine string
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/03/2006, 00h19
  5. [Configuration] probleme avec le remplacement des accents
    Par xtaze dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/12/2005, 19h16

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