Abréviation dans python

Fermé
dedey - Modifié le 17 oct. 2017 à 22:36
mamiemando
Messages postés
31045
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2022
- 23 oct. 2017 à 20:27
Bonjour,

Nous voulons éliminer les chiffres dans nos résultats, ne pas les afficher.

Voici notre programme :

import re
texte = open('UnTexte.txt','r').read()
mots = re.split(' +',texte)

i = -1

for a in mots:
    i = i + 1
    if  ((len(a) < 2) and (a.isupper())) or (((len(a) < 6) and (a[-1] == '.'))):
         #print(a)
         if not a.isdigit():
              print(a)


Que pouvons-nous faire la fonction ''digit'' pour éliminer les chiffres de la recherche ?

Merci beaucoup !

1 réponse

mamiemando
Messages postés
31045
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2022
7 344
20 oct. 2017 à 10:18
Bonjour,

Si j'ai bien compris la question, ceci devrait faire l'affaire ?

#!/usr/bin/env python3

import re

text = "bonjour 123 au revoir."
words =  re.findall("[a-zA-Z]+", text)

for word in words:
    print(word)


Ce qui donne à l'exécution :

bonjour
au
revoir


Bonne chahce
0
[Dal]
Messages postés
5842
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2022
991
20 oct. 2017 à 13:53
Salut mamiemando :-)

S'il y a des caractères accentués ?
0
[Dal]
Messages postés
5842
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2022
991
Modifié le 20 oct. 2017 à 14:31
de plus le code en ligne 9 filtre plein d'autres choses

si le but est juste d'éliminer des résultats affichés les "mots" qui comportent un ou plusieurs chiffres, on peut juste remplacer la ligne 11
if not a.isdigit():
, qui ne va servir que si le "mot" est exclusivement composé de chiffres, par
if not re.match('[0-9]+', a):
, qui va éliminer des "mots" tels que "3g." ou "123." qui autrement passeraient les filtres des lignes 9 et 11
0
mamiemando
Messages postés
31045
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2022
7 344
23 oct. 2017 à 10:27
Sauf erreur de ma part c'est vraiment un point de détail, car ça ne change rien à l'approche fondamentalement, il suffit de raffiner l'expression rationnelle

re.findall("[0-9]*[a-zA-Zâàäéèêëîïôöùûü]+", text)


Sur le même principe, tu peux de la même façon ajouter les ponctuations en fin de mots quitte à les supprimer à posteriori.

#!/usr/bin/env python3
  
import re

text = "bonjour à vous! au revoir."
words =  re.findall("[0-9]*[a-zA-Zâàäéèêëîïôöùûü]+[.,;:?]?", text)

for word in words:
    print(word.rstrip(".,;:"))


Tu peux encore complexifier pour gérer les parenthèses, accolades et crochets si tu le souhaites, dans tous les cas tu vois qu'une expression rationnelle fait le travail quitte à virer les caractères non lettre a posteriori.
0
[Dal]
Messages postés
5842
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 mai 2022
991
Modifié le 23 oct. 2017 à 13:17
si je lis la ligne 9 du code de dedey, on peut en déduire que c'est quand même des "mots" un peu particuliers qu'il/elle veut voir afficher :
if  ((len(a) < 2) and (a.isupper())) or (((len(a) < 6) and (a[-1] == '.'))):
, qui va autoriser l'affichage seulement :

1- pour des "mots" de longueur inférieure à 2 et en majuscule, donc, en fait, consistant seulement en une lettre majuscule, donc, par exemple "
A
", "
À
", etc.
ou
2- pour des "mots" de longueur inférieure à 6 et se terminant par un point, dont par exemple : "
CañA.
" (y compris le point)

sa question était qu'il/elle voulait "empêcher l'affichage de chiffres", qui ne sont susceptibles de s'afficher que comme partie de l'affichage dans le cas 2 (car un chiffre comme "1" n'est pas uppercase selon python, car il n'a pas de casse), donc, comme indiqué dans mon message, selon ma compréhension des exemples de "mots" non voulus seraient : "3g." ou "123." ou encore "G7.".

De toutes façons dedey ne donne aucun feedback, alors je crois qu'on se fatigue pour rien, malheureusement :-(
0
mamiemando
Messages postés
31045
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
14 mai 2022
7 344
23 oct. 2017 à 20:27
Ta dernière phrase résume bien mon point de vue :-)
0