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 :

rechercher un mot dans une chaine


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut rechercher un mot dans une chaine
    Bonjour je suis debutante en python depuis avant hier, et je cherche a recuperer une phrase dans un fichier texte ou se trouve un mot clé...
    J'arrive a retrouver une phrase entiere, mais je n 'arrive pas a trouver la phrase possedant le mot clé et l'afficher...je ne sait pas trop comment faire, si quelqu'un pouvais m'aiguiller ca serait gentil...je vous montre un morceau de mon code vous comprendrait mieu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    def reponse():
    	fen.fichier = open('configuration.txt', 'r')
    	question = variable.get()
    	try: 
    		question
    	except:
    		print 'la variable n\'existe pas'
    	else:
    		for ligne in fen.fichier:
    			if question in ligne:
    				try: 
    					fen.retour
    				except: 
    					print 'la variable n\'existe pas'
    				else:
    					fen.retour.destroy()
    				fen.resultat = ligne.split(':')[1]//<-- la c'est normal j'ai beoins de ce qui suit-->//
    				fen.retour = Label(fen,text=fen.resultat,foreground="red",width=100)
    				fen.retour.pack()
    Bon, là je donne jocker car j'ai passé mon aprém dessus, entre les expressions regulieres du module string et re et d'autres obscures search() ou find(), j'ai le cerveau en bouilli.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    La fonction "find()" n'est pas aussi obscure que ça. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x="ma phrase qui contient un mot-clé"
    print  x.find('mot-clé')
    La réponse est "26", c'est à dire le numéro dans la chaîne x du 1er caractère de la sous-chaîne recherchée (le 1er caractère de la chaîne étant "0").

    Si le résultat est "-1", cela veut dire que la sous-chaîne ne s'y trouve pas.

    Tyrtamos

  3. #3
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Salut,

    Pourrais-tu donner un exemple de ton fichier de configuration et de ce que tu cherches à faire ?

    Déjà tu pourrais utiliser readlines au lieu de lire ligne par ligne. Je trouve cela plus facile à gérer. Ensuite, tu as l'air de lire un fichier de configuration. En Python, il existe une librairie pour exploiter les fichiers de configuration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import ConfigParser
    As-tu essayé ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Merci,
    Le fichier configuration contient pour l'instant qu'une occurence que je me sert pour tester, donc ce n'est pas trés interessant, mais par contre le but final et de réaliser une action grace a un mot clé entrer dans une phrase par l'utilisateur, un peu du style AIML, mais en application, c'est pour creer un organiseur, par exemple j'entre: "quel rendez vous il y a t'il demain?" le programme associe "rendez-vous" et "demain" et deroule la liste des rendez vous prevu pour le lendemain.
    (j'ai appelé le fichier "configuration" mais ca n'est pas un fichier config,' c'est juste une base de donné texte comprenant une liste de mots clé et l'action a réaliser correspondant a ceux-ci)

    C'est juste une idée que je me sert pour prendre en main python.

    Je vais voir du coté de configparser et approfondir la methode find().

    Ce qui m'arrangerait beaucoup ca serait, dans la phrase entrer par l'utilisateur, de retrouver un ou plusieurs mots clé de la base de donnée sans s'occuper de ce qui ne correspond a rien dans la phrase.

    En attendant je crois avoir une idée avec find je vais faire des tests pour voir.

    Sinon est ce que quelqu'un aurait une idée pour faire un split de la phrase et boucler tout les groupes du split pour chercher chaque groupe dans la base?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,

    Tes explications ne sont pas claires du tout pour moi.
    Mais je pense que count() et partition(), que j'utilise beaucoup, te seront très utiles.

    count() compte le nombre d'occurences d'une chaine de caractères dans un string
    partition() découpe un string en 3 morceaux et renvoie les trois morceaux dans un tuple dont les élements ont pour index 0,1 et 2 évidemment.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    x= "Dionysos tenait dans sa grande main un grand thyrse fait de cornouiller"
     
    if x.count('thyrse')==1:
        print 'x contient le mot thyrse'
    if x.count('ait')>0:
        print "x contient",x.count('ait'),"fois la chaine 'ait'"
     
    print '\ntuple triplet =',x.partition('dans')
    print 'premier morceau =',x.partition('dans')[0]
    print 'deuxieme morceau =',x.partition('dans')[1]
    print 'troisieme morceau =',x.partition('dans')[2]
     
    print ''
    print x.partition('sa')[2].partition('thyrse')[0].count('grand')
    print x.partition('sa')[2].partition('thyrse')[0][-10:].count('grand')
     
    print''
    print x.partition('sa')[2][-38:].partition('thyrse')[0].count('grand')
    print x.partition('sa')[2][-30:].partition('thyrse')[0].count('grand')

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    J'ai touvé!
    Du coup je vais partir sur une liste, car beaucoup plus simple a manipuler, je vous montre ce que j'ai enfin reussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    from Tkinter import *
     
    fen = Tk()
    fen.title("Test")
    fen.geometry("600x600")
    fen.frame = Frame(fen)
    variable = Entry(fen)
     
    def reponse():
    	result  = []
    	question = variable.get()
    	recherche = question.split()
    	mots = ['salut', 'toi', 'comment', 'va', 'tu', 'te', 'mec']
     
    	for resultat in recherche:
    		for entree in mots:
    			if resultat in entree:
    				result.append(resultat)
    				try:
    					fen.retour
    				except: 
    					print 'la variable n\'existe pas'
    				else:
    					fen.retour.destroy()
     
    	final = ' '.join(result)
    	fen.retour = Label(fen,text=final ,foreground="red",width=100)
    	fen.retour.pack()
     
    fen.boutton = Button(fen,text="valider",command=reponse)
     
    variable.pack()
    fen.boutton.pack()
    fen.mainloop()
    Ca doit surement insulter vos yeux mais en tout cas j'ai pas mal galéré, mais bon ont débute tous un jour. En tout cas j'ai appris que c'est lorsqu'ont ont patoge qu'ont apprend

    Bon, demain j'essai de faire un truc fonctionnel avec ca.

    Si vous vous avais des avis pour optimiser la chose, des conseils etc.. je suis preneuse.

Discussions similaires

  1. Rechercher un mot dans une chaine de caractères
    Par zellinho dans le forum SAS Base
    Réponses: 4
    Dernier message: 14/03/2013, 09h52
  2. recherche d'un mot dans une chaine
    Par meloo dans le forum C++
    Réponses: 5
    Dernier message: 16/01/2007, 17h16
  3. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47
  4. Recherche un mot dans une chaine de caractere
    Par jean tof dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 11h34
  5. [Regex]Recherche de mots dans une chaîne
    Par lionel69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/11/2005, 18h20

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