IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Récupérer un mot à partir d'un indice


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur génie industriel
    Inscrit en
    Novembre 2016
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur génie industriel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 88
    Par défaut Récupérer un mot à partir d'un indice
    Bonjour a tous !

    Je debute sur python et ce forum m'a grandement aide il y a quelques annees quand j'apprenais VBA
    Je m'excuse par avance pour les accents inexistants je suis sur un clavier QWERTY

    Je cherche a trouver un mot dans une chaine de caractere a partir d'un indice qui ne se trouve pas etre necessairement le premier du mot

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chaine = "Hello everyone, how are you?"
    L'information que j'ai : index 9
    cela correspond au caractere 'r' du mot 'everyone'

    Je cherche a recuperer le mot entier everyone

    J'ai fait mes recherches mais je ne trouve que des solutions pour le sens inverse
    Par avance merci !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    J'ai fait ce code qui fonctionne presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    indice = 9
    Chaine = "Hello everyone, how are you?"
     
    div = Chaine.split()
    size = 0
    for mot in div:
        size += len(mot)
        if size >= indice:
            print("le mot recherché est : ", mot)
            break
    Presque à cause de la virgule...
    Il faudrait diviser la chaine en mot en tenant compte des espaces bien sûr mais aussi des virgules et de tous les signes de ponctuation...

    Je ne sais pas si on peut utiliser une regex avec split en Phyton, il faudrait que je vois ça...

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Je viens de voir pour les regex avec split et j'ai modifié le code et ça marche chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import re
     
    indice = 9
    Chaine = "Hello everyone, how are you?"
    div = re.split('[^a-zA-Z]', Chaine)
    size = 0
    for mot in div:
        size += len(mot)
        if size >= indice:
            print("le mot recherché est : ", mot)
            break
    Il y a probablement moyen d'optimiser mais je débute aussi en python...

  4. #4
    Membre confirmé
    Femme Profil pro
    Ingénieur génie industriel
    Inscrit en
    Novembre 2016
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur génie industriel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 88
    Par défaut
    Merci beaucoup Beginner,

    le problème dans ce code est que le résultat obtenu avec l'index ne correspond pas au véritable résultat car il ne prend pas en compte les espaces

    Je trouve donc un mot qui est positionne avant le mot que je recherche

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ah ok...

    Mais alors pour être sûr comment vous définissez un mot ? Une chaine qui contient que des lettres ?

    Et si l'indice ne correspond pas à une lettre, s'il correspond à un espace, une virgule ou autre... Que doit-on faire ? Donner le mot précédent ou le suivant ?

    EDIT : J'ai modifié le code afin qu'il compte les espaces, les virgules, tout ce qui n'est pas une lettre...
    Et si l'indice correspond à un espace, une virgule ou autre je renvoi le mot qui suit...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
     
    indice = 9
    Chaine = "Hello everyone, how are you?"
    div = re.split('[^a-zA-Z]', Chaine)
    size = 0
    indice += 1
    for mot in div:
        size += len(mot) + 1
        if mot == "":
            continue    
        if size > indice:
            print("le mot recherché est :'" + mot + "'")
            break

    La partie :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if mot == "":
            continue
    permet de traiter les cas où on a une suite de plusieurs caractères autres que des lettres comme une virgule suivi d'un espace...

    A optimiser...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par nananinanana Voir le message
    Je cherche a trouver un mot dans une chaine de caractere a partir d'un indice qui ne se trouve pas etre necessairement le premier du mot
    Vous avez deux solutions.

    La première est de trouver le mot qui est à l'indice donné en recherchant le séparateur de mots qui est avant et celui qui est après.

    La seconde est de construire une liste de couples d'entiers (s, e) correspondant à l'indice du début et de la fin de chaque mot puis rechercher le premier couple vérifiant s <= k < e.

    Et si vous utilisez les regexp, la seconde est assez facile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> s = "Hello everyone, how are you?"
    >>> indices = [ m.span() for m in re.finditer('[a-zA-Z]*', s) if m.group(0) ]
    >>> indices
    [(0, 5), (6, 14), (16, 19), (20, 23), (24, 27)]
    >>> k = 9
    >>> for a, b in indices:
    ...     if a <= k < b:
    ...        print(s[a:b])
    ...
    everyone
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [XL-2010] Récupérer des données à partir du mot trouvé grâce à la fonction .Find
    Par SpaceX dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/06/2018, 15h38
  2. [Débutant] Récupérer une valeur à partir d'un indice
    Par Terryroux dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/05/2017, 10h24
  3. [XL-2010] VBA récupérer des chaînes à partir d'un mot
    Par kafountines dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 27/10/2015, 00h37
  4. Réponses: 11
    Dernier message: 08/04/2005, 11h20
  5. Réponses: 3
    Dernier message: 24/09/2004, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo