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 :

mettre un ou plusieurs mot en gras et selectionnez une partie


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 34
    Points
    34
    Par défaut mettre un ou plusieurs mot en gras et selectionnez une partie
    Bonjour,

    pour un petit projet je dois en fonction de mot tapé, les retrouver dans un texte et les mettres en gras.
    de plus, pour une question de lisibilité, je dois a partir d'un mot en gras, selectionner les 5 precedents et les 5 suivants avec des "..." a chaque extremité, afin que cela donne quelque chose du type :

    ... un deux trois quatre cinq six sept huit neuf dix onze ...

    le probleme cest que je ne vois pas trop comment faire.

    en farfouillant sur le net , jai découvert ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def BoldWord(mot, texte):
     
        long = len(mot)
        for i in range(0, len(texte)):
            sel = texte[i:i+long]
            if sel.lower() == mot.lower() and texte[i-3:i]!="<b>":
                return BoldWord(mot, texte.replace(sel, "<b>%s</b>" % sel))
        return texte
    qui me permet de mettre Un mot en gras.
    Le probleme cest que j'essaies de le triturer dans tout les sens pour qu'il marche avec plusieurs mots, mais rien ne fait. quant 'à la présentation, je suis totalement out dessus :s.

    voila donc je viens aupres de vous ami(e) programmeurs en python pour obtenir votre aide et quelques directives.

    merci d'avance pour vos réponses.

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Étrange comme syntaxe les 3 points de suspension, ça sert à quoi ?

    Il manque quelques informations pour implémenter correctement ta fonction :
    - Que faire s'il y a moins de 5 mots entre deux mots à rechercher ?
    - Si le mot à rechercher est à moins de 5 mots du début du texte ? et à moins de 5 mots de la fin du texte ?

    Voici ma fonction, s'il y a moins de 5 mots avant ou après le mot en gras, alors les "..." sont insérés aussi loin que le texte le permet.

    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
     
    def mettreEnGras(mot, texte):
     
        tab_mots = texte.split()
        for i in xrange(len(tab_mots)):
            if tab_mots[i] == mot:
                tab_mots[i] = "<b>%s</b>" % tab_mots[i]
     
                # insertion des "..." avant et après
                ecart_avant = min(len(tab_mots[:i]), 5)
                ecart_apres = min(len(tab_mots[i+1:]), 5)
                tab_mots[i-ecart_avant] = "... " + tab_mots[i-ecart_avant]
                tab_mots[i+ecart_apres] += " ..."
     
        return " ".join(tab_mots)
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mot =  "plop"
    texte = "un deux trois plop quatre cinq six sept huit neuf dix"
    print mettreEnGras(mot, texte)
    print mettreEnGras("a", "a")
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ... un deux trois <b>plop</b> quatre cinq six sept huit ... neuf dix
    ... <b>a</b> ...
    Dis moi comment faire si ce système ne te convient pas.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 34
    Points
    34
    Par défaut
    merci beaucoup cest parfait cest exactement cela

    encore merci cela va m'aider fortement

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 34
    Points
    34
    Par défaut
    En retripatouillant un peu le truc j'ai remarqué que j'avais un probleme en fait encore ^^ (donc desole d'annulé ma requete résolu) :

    pour etre concret, j'ai un long texte et si le mot recherché est le dernier par exemple, je me retrouve a avoir :

    [tout le texte] ... un deux trois quatre cinq <b>six</b>

    or il faudrait que je n'ai que:
    ... un deux trois quatre cinq <b>six</b>

    .

    j'ai essayé de deplacer les elements en faisant tab[0]=xxx ... et ainsi de suite, mais je dois mal m'y prendre car cela ne fonctionne pas, ou alors c'est pas du tout la bonne methode, et il y a peut etre quelque chose de plus simple

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    def BoldWord(mot, texte):
    	avant=int(MotsParExtrait)/2
     
    	tab_mots = texte.split()
    	tab=tab_mots
    	mots=mot.split(None)
     
    	for j in range(0,len(mots)):
    		mot=mots[j]
     
    		for i in range(0,len(tab_mots)):
    			if tab_mots[i].lower() == mot.lower():
    				tab_mots[i] = "<b>%s</b>" % tab_mots[i]
     
    		# insertion des "..." avant et après
     
    				ecart_avant = min(len(tab_mots[:i]), avant)
    				ecart_apres = min(len(tab_mots[i+1:]), avant)
     
    				if len(tab_mots)<MotsParExtrait:
    					tab_mots[i-ecart_avant]=tab_mots[i-ecart_avant]
    					tab_mots[i+ecart_apres] += " ..."
     
    				elif i>avant :
    					tab_mots[i-ecart_avant]="... "
    					for k in range(0,len(mots)):
    						tab[k]=tab_mots[i-avant]
     
     
     
    					#if len(mots)>1 :
    					#tab_mots[i-ecart_avant]="... "
    					#if len(tab_mots)>MotsParExtrait :
    					#	tab_mots[i+ecart_apres]=tab_mots[i+ecart_apres]
    					#else :
     
     
     
     
     
    				if (i+avant+1)<len(tab_mots):
    					tab_mots[i+ecart_apres] += " ..."
    					tab_mots[i+avant+1]="\0"
     
    	return " ".join(tab_mots)
    voila, merci d'avance pour votre aide

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Je n'ai rien compris...
    Tu veux que la fonction tronque le texte ? C'est à dire qu'elle doit retourner seulement ce qu'il y a entre les deux "..." ?
    Si oui, on tronque quand ? Toujours ? Et s'il y a plusieurs mots en gras, on tronque entre les "..." situés aux extrémités ?

    Et ton code est un drôle de charabia aussi : MotsParExtrait qui sort du chapeau, des variables non utilisées...
    Et le caractère "\0" correspond à quoi ? Tu veux marquer la fin de la chaîne comme en langage C ?

    Merci d'être plus clair, notamment en précisant quel est le comportement attendu suivant les différents cas d'utilisation

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 34
    Points
    34
    Par défaut
    bonjour,

    désolé pour le "charabia" de ma programmation, je ne suis que novice, et il est vrai que c'est parfois fouilli, mais pour l'instant, tant que ca fonctionne ca me va ^^ (apres quand j'aurais plus l'experience de la chose, je pense que mon code sera plus clair & organisé).

    pour le fonctionnement en fait cela se passe ainsi :

    - si on cherche un mot :

    cas 1 : ce mot se situe au debut et a moins de 5 (pour l'exemple) mot du debut du texte. alors on doit avoir : mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8 (soit moins de 5 mots avant donc pas de ... mais parcontre des que plus de 5 mots apres alors ...)

    cas 2: le mot se situe en plein milieu du texte, on doit alors afficher : ...mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8 mot9 mot10 mot11...

    cas 3 : le mot se situe en fin de texte (dernier mot ou a moins de 5 mots de la fin), on a : ...mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8.


    - si on cherche plusieurs mots (biensur la position dans le texte doit retourner le meme principe de resultats que dans le cas d'un seul mot recherché) :

    cas 1 : les 2 mots recherchés sont dans la limite de l'affichage (cest a dire que le total de mot fait apparaitre les 2 mots, sur lexemple precedent, on avait 5 mot avant et 5mots apres, soit 11 mots au total). on a :
    ...mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8 mot9 mot10 mot11...

    cas 2: les 2 mots recherchés sont séparés par plus de mots que l'affichage le permet , dans ce cas on a :
    ...mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8 mot9 mot10 mot11...mot15 mot16 mot17 mot18 mot19 mot20 mot21 mot22 mot23 mot24 mot25


    voila, j'espere que c'est un peu plus clair ^^ (désolé si je suis confu parfois mes pensées s'embrouillent souvent ^^)
    pour ce qui est du '\0' oui c'est des vieux restes de C d'antant ^^ donc j'ai essayé et cela a fonctionner , apres ce n'est peu etre pas reglementaire mais à defaut si ca fonctionne

    EDIT : vous embetez pas j'ai reussi, encore merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Encodage] Mettre des mots en gras
    Par PIEPLU dans le forum Langage
    Réponses: 5
    Dernier message: 09/09/2011, 15h30
  2. [MySQL] Mettre plusieurs mots différents en évidence
    Par mike_chti dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2008, 13h00
  3. Moteur de recherche et plusieurs mots clés
    Par jack1234 dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 10h29
  4. Réponses: 6
    Dernier message: 04/11/2005, 17h09
  5. prob affichage mot en gras dans un texte
    Par klik dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/07/2005, 08h38

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