Python : Recherche d'un exposant ..

Résolu/Fermé
Theplanettelex - 4 août 2010 à 10:56
 Theplanettelex - 12 août 2010 à 12:31
Bonjour,

J'ai un problème qui me paraît délicat à résoudre. J'ai fait un programme qui cherche les occurrences dans des textes, et parmi les mots clés que je recherche il y a le terme 2°C. Jusqu'ici tout va bien.

Seulement voilà, les auteurs de certains des textes ont écrit 2°C non pas avec le caractère ° mais avec un "O" en exposant. Mon problème est donc de ne pas savoir comment formuler en Python le fait d'avoir un caractère en exposant. (j'utilise la fonction "find" pour chercher les occurrences, qui prend notamment en entrée des chaînes de caractères)

En vous remerciant par avance.


7 réponses

En utilisant les expressions régulière peut-être ? sans code dur d'en dire plus désolé.
0
Petit exemple :

>>> import re
>>> texte = "2°C 2OC"
>>> regex = re.search('[0-9][O]?[A-Za-z]',texte)
>>> regex.group()
'2OC'

Ou tu peux rechercher toutes tes occurrences avec la variante :

>>> import re
>>> texte = "2°C 2OC"
>>> regex = re.findall('[0-9][O°]?[A-Za-z]',texte)
>>> regex
['2°C', '2OC']

Je ne suis pas sûr a 100% d'avoir compris ton problème mais j'espère malgré tout que cela pourra t'aider.
0
Theplanettelex
6 août 2010 à 13:39
En fait, mon problème est plus de ne pas pouvoir trouver le caractère O en exposant (dans un fichier texte disons), qui n'est donc pas trouvé par une recherche du caractère O.

Merci tout de même !
0
Je ne comprends pas, si tu as accès au texte pourquoi tu ne copie colle pas directement le caractère en exposant qui te pose problème dans la fonction find ou plutôt dans le deuxième code que je t'ai montrer ? Si tu cherche toujours une solution essaye de donner un bout de texte que je puisse mieux comprendre la situation.
0
Il suffit de remplacer dans ton texte les "O" par des "°", non? Avec les regex toujours, je ne vois pas autrement.

Exemple :

texte="Il fait beau dans le sud, on a 32°C. Dans le nord la temperature moyenne est de 20OC" 
temp=re.findall("\d+OC", texte) 
for i in temp: 
    texte=texte.replace(i, "°".join(i.split("O"))) 

print texte 

Il fait beau dans le sud, on a 32°C. Dans le nord la temperature moyenne est de 20°C


Mais je crois que ce que tu veux c'est remplacer un exposant autre que °, et là je ne vois pas désolé.
0
Theplanettelex
11 août 2010 à 11:09
Bon, je suis désolé, je crois que je n'ai pas assez expliqué mon problème. J'ai un corpus de fichiers texte en pdf, dans lesquels ont peut trouver "2°C", avec donc le caractère ° que nous trouvons sur nos claviers français, et le même terme mais en remplaçant ° par un O en exposant (que je ne peux pas faire ici).

J'ai fait un pdf to text pour tous les fichiers du corpus, afin de n'avoir que des fichiers textes, et dans la conversion, le caractère ° se change en "¬?" et le O en exposant se change en "¬?".

Quand je fais ma recherche d'occurrences, je trouve tous les "2¬?C" en faisant une recherche des "2°C" (donc j'utilise directement le caractère ° dans la chaine que je mets dans la fonction find), mais bien entendu aucun "2¬?C".. car je ne sais pas comment exprimer dans ma commande le fait que le 0 est en exposant.

Je ne sais pas si c'est assez clair, mais déjà merci de votre attention..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
si j'ai bien compris quand tu ouvres tes fichiers texte, le O exposant et le ° apparaissent de la même manière "¬?"

pourquoi ne pas faire une recherche directement sur "2¬?C" dans les fichiers textes? Ainsi tu vas retrouver toutes les occurrences sans tenir compte du fait que ce soit un O ou °

après je sais pas si le caractère "¬" sera facile à lui faire accepter (attention notamment au codage)

j'espère que ça pourra t'aider sinon dis le et on essayera de trouver une autre idée
0
Theplanettelex
12 août 2010 à 10:32
Bon en fait, les ? ce sont des caractères que le navigateur ne peut pas afficher... :(

Dans le cas du ° il s'agit de ¬ suivit d'un signe infini, et dans le cas du O en exposant il s'agit d'un ¬ suivit du signe intégrale.

Je précise que quand je mets ° dans ma fonction find, il me trouve tous les caractères du type ¬ suivit du signe infini..
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
12 août 2010 à 11:07
Salut.
un exposant n'est pas un caractère, c'est un attribut. Lorsque tu effectue ta conversion pdf2text, tu as du texte simple, donc sans attribut. Il est alors impossible de détecter une lettre en exposant.
La bonne nouvelle, c'est que ça ne semble pas être la lettre "O" mise en exposant, car pdf2text te le traduit en ¬ suivit du signe intégrale. Il semblerait donc que tu ais deux codes pour le symbole "°".
Si tu regarde là par exemple : https://fr.wikipedia.org/wiki/Latin1
Sur la ligne Bx, tu vois le symbole ° (x0) et le symbole º (xA).
Donc essaie avec l'expression régulière :
re.findall('[°,º]C',texte)

En espérant que ça t'aide.
0
Theplanettelex
12 août 2010 à 12:31
C'est parfait ! Merci infiniment !
0