Python - savoir si un mot est dans un intervalle avec séparateurs particuliers
Résolu/Fermé
A voir également:
- Python - savoir si un mot est dans un intervalle avec séparateurs particuliers
- Mettre un mot de passe sur un dossier - Guide
- Sites de vente entre particuliers - Guide
- Le fichier à télécharger contient un mot caché. quel est le format du fichier ? quel est le mot caché ? ✓ - Forum Windows
- Si cellule contient un mot alors ✓ - Forum Excel
8 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
28 janv. 2021 à 13:12
28 janv. 2021 à 13:12
Bonjour,
Pas très clair
Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase
Il y a 4 fois le mot phrase, c'est quoi le critère pour découper ?
Pas très clair
Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase
Il y a 4 fois le mot phrase, c'est quoi le critère pour découper ?
Utilisateur anonyme
28 janv. 2021 à 15:49
28 janv. 2021 à 15:49
Bonjour
En un mot => Regex
Y’a plein de tuto en français sur le net sur les regex en général.
A priori pour leurs implémentations en Python, c’est plutôt en anglais.
Pour trouver la bonne syntaxe avant de l’implémenter dans ton programme, tu peux te servir de regex101.com
Ce site permet de choisir le moteur de regex python 2.7
Un exemple
https://regex101.com/r/WTnpO1/1
En un mot => Regex
Y’a plein de tuto en français sur le net sur les regex en général.
A priori pour leurs implémentations en Python, c’est plutôt en anglais.
Pour trouver la bonne syntaxe avant de l’implémenter dans ton programme, tu peux te servir de regex101.com
Ce site permet de choisir le moteur de regex python 2.7
Un exemple
https://regex101.com/r/WTnpO1/1
yg_be
Messages postés
23313
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
Ambassadeur
1 552
28 janv. 2021 à 16:10
28 janv. 2021 à 16:10
bonjour,
je commencerais en utilisant split, qui va te créer une liste de portions.
je commencerais en utilisant split, qui va te créer une liste de portions.
montexte= 'Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase' portions=montexte.split('\n') print(portions)
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
28 janv. 2021 à 16:53
28 janv. 2021 à 16:53
C'est ça:
Tu découpe ta chaine en une liste avec split et ensuite, tu parcours
la liste avec une boucle, et pour chaque élément, tu utilise les expressions régulières pour extraire phrase mais pas phrases,
ni paraphrase, bref, tout ce qui n'est pas purement
phrase et tu comptes
Tu découpe ta chaine en une liste avec split et ensuite, tu parcours
la liste avec une boucle, et pour chaque élément, tu utilise les expressions régulières pour extraire phrase mais pas phrases,
ni paraphrase, bref, tout ce qui n'est pas purement
phrase et tu comptes
yg_be
Messages postés
23313
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
1 552
28 janv. 2021 à 17:18
28 janv. 2021 à 17:18
n'est-il pas préférable d'utiliser la méthode split pour découper chaque portion en mots, et, ensuite, de chercher dans quelles portions se trouvent le mot
les expressions régulières ne me semblent pas utiles dans ce cas-ci.
phrase?
les expressions régulières ne me semblent pas utiles dans ce cas-ci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 28 janv. 2021 à 17:26
Modifié le 28 janv. 2021 à 17:26
Bah, on pense à ça car il faut prendre exactement phrase, mais pas phrases,
ni paraphrase ...
ni paraphrase ...
Utilisateur anonyme
Modifié le 28 janv. 2021 à 18:01
Modifié le 28 janv. 2021 à 18:01
Bon faut admettre que mes tests sur regex101 avec le moteur python 2.7 sont décevants.....
Ici sur regexstorm, avec le moteur .Net, cette regex
(lien à copier coller, car CCM ne l'interprète pas comme il faut)
Mais, sur regex101, en python 2.7, elle plante, j'ai trouvé un autre site, pyRegex.com où elle plante aussi.
J'ai essayé sur un site de python en ligne, ça plante aussi mais au moins y'a un message d'erreur...
Ici sur regexstorm, avec le moteur .Net, cette regex
(?<=\\n.*?)\bphrase\b(?=.*?\\n)donne directement le nombre d'occurrences
(lien à copier coller, car CCM ne l'interprète pas comme il faut)
http://regexstorm.net/tester?p=%28%3f%3c%3d%5c%5cn.*%3f%29%5cbphrase%5cb%28%3f%3d.*%3f%5c%5cn%29&i=Premi%c3%a8re+phrase%5cnDeuxi%c3%a8me+phrases+phrase%5cnToisi%c3%a8me+%2cphrase%2c+paraphrase%5cnQuatri%c3%a8me+phrase.+phrases+%3aphrase%3b+%5cn+phrase
Mais, sur regex101, en python 2.7, elle plante, j'ai trouvé un autre site, pyRegex.com où elle plante aussi.
J'ai essayé sur un site de python en ligne, ça plante aussi mais au moins y'a un message d'erreur...
Apparement Python n'accepte pas les "lookahead assertion" et "lookbehind assertion" de longueur variable....
Si je sors la longueur variable des ces assertions, ça ne reconnait plus
https://regex101.com/r/WTnpO1/3
Du coup, je me range à l'avis de Phil, un split puis une regex "toute simple" qui cherche dans chaque morceau découpé le mot pile poil.
https://regex101.com/r/WTnpO1/4
Si je sors la longueur variable des ces assertions, ça ne reconnait plus
\nQuatrième phrase. phrases :phrase; \ncomme 2 occurrences....
https://regex101.com/r/WTnpO1/3
Du coup, je me range à l'avis de Phil, un split puis une regex "toute simple" qui cherche dans chaque morceau découpé le mot pile poil.
https://regex101.com/r/WTnpO1/4
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
29 janv. 2021 à 12:04
29 janv. 2021 à 12:04
Bonjour,
Oui, on peut utiliser la notion de boundary (\b)
pour délimiter phrase :
Oui, on peut utiliser la notion de boundary (\b)
pour délimiter phrase :
print('\nExact match') montexte= 'Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase' portions=montexte.split('\n') print(portions) pattern ='\\bphrase\\b' print(re.findall(pattern, portions[1]))
Bonjour,
Et merci à tous pour vos réponses. En me basant dessus, je suis parvenue au code suivant, qui semble faire le job, puisque j'obtiens 2 en résultat:
Merci!
Et merci à tous pour vos réponses. En me basant dessus, je suis parvenue au code suivant, qui semble faire le job, puisque j'obtiens 2 en résultat:
montexte='Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phras\n' portions=montexte.split('\n') co=0 for portion in portions: if re.search(r'\bphrase\b',portion): co+=1 print(co)
Merci!
yg_be
Messages postés
23313
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
1 552
29 janv. 2021 à 12:19
29 janv. 2021 à 12:19
l'utilisation de regex me semble un détour inutile:
montexte= 'Première phrase\nDeuxième phrases\nToisième paraphrase\nQuatrième phrase phrase phrase' cherche='phrase' nmots=0 for portion in montexte.split('\n'): for mot in portion.split(' '): if mot==cherche: nmots = nmots + 1 break print (nmots)
Lena_tkd
>
yg_be
Messages postés
23313
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
29 janv. 2021 à 12:26
29 janv. 2021 à 12:26
C'est parfait!!
Merci beaucoup!!
Merci beaucoup!!
yg_be
Messages postés
23313
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
1 552
>
Lena_tkd
29 janv. 2021 à 13:31
29 janv. 2021 à 13:31
cherche='phrase' pattern ='\\b'+cherche+'\\b'
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
29 janv. 2021 à 12:51
29 janv. 2021 à 12:51
l'utilisation de regex me semble un détour inutile:
Oui mais de mon point de vue c'est direct et élégant, je trouve, pas besoin de créer la mécanique soi-même ...
Bon .....
Oui mais de mon point de vue c'est direct et élégant, je trouve, pas besoin de créer la mécanique soi-même ...
Bon .....
28 janv. 2021 à 14:17
Et merci pour votre réponse. Comme indiqué dans ma demande, le délimiteur est ici '\n' mais j'aurais pu utiliser tout autre symbole ou chaîne de caractère. Et la question est de savoir dans combien de ces intervalles le mot 'phrase' apparaît (et non connaître l'occurrence totale).
Merci encore