Abréviation dans python

Fermé
dedey - Modifié le 17 oct. 2017 à 22:36
mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 - 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 !
A voir également:

1 réponse

mamiemando Messages postés 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 7 801
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 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
20 oct. 2017 à 13:53
Salut mamiemando :-)

S'il y a des caractères accentués ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
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 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 7 801
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 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
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 33334 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 novembre 2024 7 801
23 oct. 2017 à 20:27
Ta dernière phrase résume bien mon point de vue :-)
0