Partage
  • Partager sur Facebook
  • Partager sur Twitter

Supprimer accent d'un str avec dictionnaire

    14 février 2017 à 12:24:08

    Bonjour,

    Je voudrais savoir comment je pourrais supprimer les accents d'une chaine de caractère en passant par un dictionnaire.

    Sachant que j'ai créé ce dico :

    EQUIV_NON_ACCENTUE={ 'a': ['à', 'ã', 'á', 'â'],
                        'e': ['é', 'è', 'ê', 'ë'],
                        'i': ['î', 'ï'],
                        'u': ['ù', 'ü', 'û'],
                        'o': ['ô', 'ö'] }
    


    J'ai commencé la fonction en supprimant les majuscules pour que ce soit un chaine str classique, mais après, impossible de remplacer les accents pas les équivalents non accentués ...

    def bas_casse_sans_accent(mot):
        mot=mot.lower()
        mot=list(mot)
        for i in range(len(mot)):
            if mot[i] in EQUIV_NON_ACCENTUE:
                mot[i]=EQUIV_NON_ACCENTUE.key(mot[i])
            else:
                mot[i]=mot[i]
        return (''.join(mot))

    Mais rien ne change au accent ...

    Si quelqu'un aurait une idée, 

    Un énorme merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      14 février 2017 à 12:40:48

      Il y a des modules pour cela en python qui évite de réinventer la roue,

      >>> from unicodedata import normalize, category
      >>> ''.join(x for x in normalize('NFKD', 'éléna') if \
      ... category(x)[0] == 'L')
      'elena'
      


      unicodedata

      -
      Edité par Anonyme 14 février 2017 à 12:41:22

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2017 à 12:44:43

        Merci de votre réponse.

        Mais je dois passé par un dictionnaire obligatoirement, c'est pour un exercice ...

        -
        Edité par EneRGiik 14 février 2017 à 12:45:14

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          14 février 2017 à 14:43:37

          Ce sera plus simple si tu inverses les clés et les valeurs de ton dictionnaire :

          TO_ACCENTS = {
              'a' : ('à', 'ã', 'á', 'â'),
              'e' : ('é', 'è', 'ê', 'ë'),
              'i' : ('î', 'ï'),
              'u' : ('ù', 'ü', 'û'),
              'o' : ('ô', 'ö')
          }
          
          FROM_ACCENTS = {}
          for letter, accents in TO_ACCENTS.items():  # help(dict.items)
              for accent in accents:
                  FROM_ACCENTS[accent] = letter
          
          # ...
          
          results = ''
          for char in text:
              results += FROM_ACCENTS.get(char, char) # help(dict.get)
          return results
          
          • Partager sur Facebook
          • Partager sur Twitter

          Supprimer accent d'un str avec dictionnaire

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown