Abréviation dans python
Bonjour,
Nous voulons éliminer les chiffres dans nos résultats, ne pas les afficher.
Voici notre programme :
Que pouvons-nous faire la fonction ''digit'' pour éliminer les chiffres de la recherche ?
Merci beaucoup !
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
-
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-
-
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 11if not a.isdigit():
, qui ne va servir que si le "mot" est exclusivement composé de chiffres, parif 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 -
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. -
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 :-( -
-