Extraire les mots d'un texte comportant de la ponctuation
Fermémamiemando Messages postés 33369 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 10 nov. 2022 à 11:02
- Extraire les mots d'un texte comportant de la ponctuation
- Extraire une video youtube - Guide
- Tableau règles de ponctuation - Guide
- Extraire son video - Guide
- Excel cellule couleur si condition texte - Guide
- Transcription audio en texte word gratuit - Guide
4 réponses
Modifié le 8 nov. 2022 à 14:43
Salut okchf,
Tu dois recenser les différents caractères qui délimitent des mots.
Tu pourrais considérer l'apostrophe comme un de ces caractères, car "d'un" est la contraction de deux mots : de un.
Une fois que tu as fait ce recensement, tu peux utiliser, par exemple, re.split pour diviser une chaîne selon les caractères séparateurs identifiés.
https://docs.python.org/3/library/re.html#re.split
Un exemple :
import re ligne = "Quand on est mort... écoutez ça... quand on est mort, c'est pour longtemps. (Emile Zola)" for mot in re.split("[ ,.'()]+", ligne): print(mot)
"[ ,.'()]+" est une expression rationnelle qui signifie "un ou plusieurs caractère(s) parmi ceux entre les crochets".
donne :
$ python3 37726332.py
Quand
on
est
mort
écoutez
ça
quand
on
est
mort
c
est
pour
longtemps
Emile
Zola
Salut,
Tu peux utiliser la méthode replace()
Ex:
a = contenu.replace(".", "")
remplacera tous les points par rien.
Modifié le 8 nov. 2022 à 19:06
Bonjour, Merci énormément pour votre aide et votre effort c'est très gentil , j'espère que ca vous dérange pas de vous redemander quelque chose voila mon code pour cet exercice:
f = open(file) contenu = f.readline() a = contenu.lower() s = {} for mot in re.split("[-? ,.'()]+", a): if mot not in s : s.setdefault(len(mot),[]).append(mot) print(s)
mon problème est la répétition des mots dans mon dictionnaire , j'ai essayé la méthode :
if mot not in s:
mais ca ne change rien . Merci en avance.
Peux-tu faire l'effort de poster correctement ton code, comme je te l'ai déjà demandé dans la discussion en doublon ?
Je te remets une fois de plus le lien avec le petit tuto pour nous rendre l'aide plus facile.
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Modifié le 8 nov. 2022 à 19:23
Quand tu postes ton code n'oublie pas d'indiquer dans la liste déroulante le langage de programmation pour que la coloration syntaxique fonctionne.
Quant à ton code, là je pense que tu testes si le mot est présent parmi les clefs du dictionnaire...
Je pense que tu dois d'abord tester si la clef existe dans ton dictionnaire.
Si ce n'est pas le cas, tu peux créer ta liste à cet emplacement avec le premier mot que tu traites.
Si la clef existe dans ton dictionnaire, alors, cela signifie que tu as au moins une entrée dans la liste correspondant à cette clef. Avant d'insérer une nouvelle entrée, tu dois :
- vérifier si cette entrée n'existe pas déjà
- si elle n'existe pas déjà, l'insérer dans l'ordre alphabétique (si elle existe déjà, tu ne fais rien de ce mot répété)
Pour insérer un mot dans une liste triée, je pense que tu pourrais t'intéresser à bisect.insort :
L'énoncé dit:
"un dictionnaire associant à une longueur l la liste triée (dans l’ordre utf-8 croissant) des mots de longueur l"
Donc la clé est la longueur des mots. Pour chaque longueur, on a la "liste" des mots "triés"
On pourrait éviter les doublons en considérant la valeur comme un set et faire des add, puis reconvertir en liste à la fin avec sorted.
8 nov. 2022 à 14:56
Bonjour,
Une variante encore plus simple :
Bonne chance
8 nov. 2022 à 15:28
Bonjour
Okchf semble en être au split de la classe string dans sa formation.
Le split Regex c'est déjà un cran au dessus, alors une expression lambda avec regex, pas sûr que ce soir plus simple....
okchf, avec le split que tu connais, tu peux commencer par remplacer tous les caractères que tu présents comme étant "séparateur" par un seul, la virgule par exemple, et ensuite spliter par les virgules et supprimer les "cases" vides.
Si tu connais les regex, alors la solution de [Dal] est la plus adaptée, je pense
8 nov. 2022 à 16:21
Une regex sur c'est... je ne pense pas que ça devienne un mot...
Modifié le 8 nov. 2022 à 16:29
Et pourtant ...
Résultat :
9 nov. 2022 à 04:28
D'accord sur le principe mais C n'est pas un mot.... Juste une lettre