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 :

Déterminer un mot dans une chaine de caractères


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 27
    Par défaut Déterminer un mot dans une chaine de caractères
    Bonjour,
    Etant nouveau sur le forum je ne sais pas si je suis dans la bonne catégorie veuillez m'en excusez.

    Alors voila mon probleme: j'aimerai partir d'une chaine tel que par exemple :"BonjourcommentcavaBonjourallezvousbienBonjourcomment"

    Et j'aimerai que le programme me renvoie que le terme "Bonjour" est apparu le plus de fois suivit du terme "comment".

    Je ne vois absolument pas comment faire, si l'un d'entre vous pourrait m'aider cela serait extremement gentil.

    Cordialement,
    Miserness

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Dans le module collections il y a Counter: https://docs.python.org/3/library/co...ctions.Counter

    Malheureusement tes mots ne sont pas séparés, est-ce intentionnel ? Il faudra résoudre cela en premier lieu.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 27
    Par défaut Suite
    Si vous savez comment je pourrais separer les mots je suis preneur aussi sachant que je n'ai aucune idée de comment faire. Sachant que je ne peut modifier le fait qu'il arrive collé.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Citation Envoyé par Miserness Voir le message
    Sachant que je ne peut modifier le fait qu'il arrive collé.
    Tu peux préciser ?

    Je ne pense pas que tu puisse séparer les mots simplement et pas de façon sûre puisqu'il y a des sous-mots; Bonjour = Bon + on + jour + ou + Bonjour

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 27
    Par défaut
    Je viens de voir cela en effet. J'ai reussi a contourner le probleme mais mtn j'ai besoin d'aide sur un point un peu similaire.
    Imaginons que j'ai liste =(Bonjour,2)("Enrevoir",3) ...etc

    Comment puis-je extraire uniquement les mots ?

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par Miserness Voir le message
    Je viens de voir cela en effet. J'ai reussi a contourner le probleme mais mtn j'ai besoin d'aide sur un point un peu similaire.
    Imaginons que j'ai liste =(Bonjour,2)("Enrevoir",3) ...etc

    Comment puis-je extraire uniquement les mots ?
    liste n'est pas une liste : si tu t'exprimais plus clairement, cela serait plus simple de t'aider.
    Perso, je ne comprends pas trop ce que tu souhaites.
    Donne un exemple clair (et complet).

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 27
    Par défaut
    Pardon, j'ai appelle cela une liste alors qu'enfait il s'agit d'une chaine de ce genre :

    chaine = (Bonjour,2)(Enrevoir,3) ....etc

    Je veux juste que le programme me sorte une liste du type : [Bonjour,Enrevoir,...]

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Une chaîne ne s'exprime pas de cette manière, il manque les guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = "(Bonjour,2)(Enrevoir,3)"
    En ce qui me concerne je trouve le plus pratique de trier tout ça avec les regex.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import re
    >>> chaine = "(Bonjour,2)(Enrevoir,3)"
    >>> re.findall("[a-zA-Z]+", chaine)
    ['Bonjour', 'Enrevoir']
    Cependant j'ai bien l'impression que tu t'y prends de la mauvaise manière, tes chaînes ressemblant à des tuples que tu as transformé en chaîne pour les écrire dans un fichier. Très mauvaise pratique si c'est le cas !

  9. #9
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par Miserness Voir le message
    chaine = (Bonjour,2)(Enrevoir,3) ....etc
    faux, ça n'est absolument pas une chaine, une chaine en python c'est au minimum un truc entre guillemets comme "salut"
    quant à "Enrevoir" ça n'est pas un mot de la langue française, au mieux c'est "au revoir" et c'est 2 mots distincts, "au" et "revoir" (ou éventuellement avec un trait d'union)

    Je veux juste que le programme me sorte une liste du type : [Bonjour,Enrevoir,...]
    faux, "je veux juste que" laisse entendre que c'est facile, hors ça n'est pas facile, la preuve tu galères rien que pour en parler correctement, nous (humains) on essaye de comprendre, Python lui il s'en fout, si tu lui cause de manière approximative t'auras pas ce que tu veux.

    une idée ce serait sans doute d'avoir un dictionnaire de mots dans lequel on pioche pour vérifier à chaque instant si on reconnait un mot ou pas, y'a plusieurs façons de faire, mais l'ordre des mots dans le dico compte de toutes façons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import re
    >>> dictionnaire = ['annee', 'bonjour', 'bonnes', 'de', 'd', 'et', 'fetes', 'fin'] # l'ordre des mots est important, par exemple "de" et "d"
    >>> chaine = 'bonjouretbonnesfetesdefindannee'
    >>> re.findall('|'.join(dictionnaire), chaine)
    ['bonjour', 'et', 'bonnes', 'fetes', 'de', 'fin', 'd', 'annee']

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 341
    Par défaut
    Hmmm,

    Avec une phrase du genre: unbonjourpourentreprendreleverredevin, ça pourrait être marrant

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2017
    Messages : 27
    Par défaut
    Merci a tous pour vos reponses !

    Effectivement enrevoir n'est pas un mot ahaha

    et je sais pas si je m'y prend de la mauvaise maniere je vais essayer de fixer cela.

    En tout cas merci du coup de main !

  12. #12
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Avec une phrase du genre: unbonjourpourentreprendreleverredevin, ça pourrait être marrant
    hinhin oui, avec entre(PREP) prendre(VERB) et entreprendre(VERB) ça passe encore, un étiquetage va vite permettre de retomber sur ses pieds en étudiant la cohérence grammaticale de la phrase

    en revanche la désambiguïsation entre un(DET) bon(ADJ) jour(NOM) et un(DET) bonjour(NOM) par exemple est beaucoup plus complexe à identifier, c'est plus seulement l'analyse structurelle de la phrase mais véritablement celle de son sens qui va permettre de trancher (je pense même qu'on doit pouvoir trouver un bon nombre d'humains qui auront du mal à identifier correctement)

    m'est avis qu'on en est pas là

  13. #13
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 341
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    hinhin oui, avec entre(PREP) prendre(VERB) et entreprendre(VERB) ça passe encore, un étiquetage va vite permettre de retomber sur ses pieds en étudiant la cohérence grammaticale de la phrase
    On peut aussi avoir de l'ambiguïté, en ayant une phrase avec des sens différents selon comment on découpe le(s) mot(s).
    cestcommeçaentreprendreunproblèmeetlerésoudreiln'yapasdedemimesure.

    Ok, j'arrête là.

    Bonnes Fêtes à tous.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  3. Extraction mots dans une chaine de caractère
    Par mercure07 dans le forum C
    Réponses: 6
    Dernier message: 30/07/2008, 13h54
  4. [RegEx] trouver un mot dans une chaine de caractère
    Par starr dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 15h36
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

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