Partage
  • Partager sur Facebook
  • Partager sur Twitter

Analyse du nombre de caractère dans une phrase..

    31 août 2010 à 4:22:57

    Bonjours.

    En ce moment j'essaye de crée un script qui ouvre un fichier texte contenant plusieure phrase d'un nombre de caratère différent.
    Le but pour le programme est de trouver la phrase la plus longue...

    Chose facile quand il n'y a qu'une ligne, on utilise la fonction len().
    Mais quand je fait ça, la fonction englobe la totalitée du fichier...

    La solution serait de crée un boucle...Mais je vois pas comment différencier les phrase l'une des autre.
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2010 à 4:42:44

      Citation : ShikiSokuZeku

      Mais je vois pas comment différencier les phrase l'une des autre.


      En général une phrase bien formée commence par une majuscule et se termine par un point.

      Sinon pour donner un avis sur ta manière de réfléchir, je pense que tu devrais t'entraîner à réfléchir de façon plus ordonnée.
      Par exemple quand je lis ça :

      Citation : ShikiSokuZeku

      La solution serait de crée un boucle...Mais je vois pas comment différencier les phrase l'une des autre.


      Tu penses déjà au code, alors que ton problème n'est pas encore clairement défini (découper une chaîne en phrases).
      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

      Anonyme
        31 août 2010 à 9:48:17

        Citation

        En général une phrase bien formée commence par une majuscule et se termine par un point.



        Je plussoie tout ce que dis LoupSolitaire, mais je dirais même plus, au cas où tu aurais des noms propres qui commencent aussi par une majuscule.

        Donc il faut vérifier que ta majuscule est précédée par un point aussi. :p

        Sans compter les points de suspensions...

        Et puis la virgule, le point se sont des caractères? A réfléchir!

        En fait c'est bien plus complexe que l'on ne le croit, et c'est là où je plussoie le plus LoupSolitaire, c'est qu'il faut un minimum de réflexion, et ça commence peut-être par le papier, eh oui!

        Après il y aura aussi la gestion des accents suivant ta version de python.

        etc... On peut aller loin comme ça.

        Le méthodes de string seront intéressantes, le module string, etc...

        Bon il y a du boulot, alors go!!!
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2010 à 10:29:53

          Hum, je sais pas à quoi ressemble tes phrases, mais si c'est des phrases simples il te suffit d'utiliser la fonction split pour séparer les phrases et les mettre dans un tableau. Après il faut voir si tu dois compter les espaces, les ponctuations etc...
          Enfin pour un exemple simple :
          phrases = "Je suis un Zéro. J'apprends Python. Je cherche la phrase la plus longue."
          phrases = phrases.split(". ")
          print(phrases)
          for i,n in enumerate(phrases):
          	if len(n) == max(len(n) for n in phrases):
          		print(phrases[i])
          

          donnerait:
          ['Je suis un Zéro', "J'apprends Python", 'Je cherche la phrase la plus longue.']
          Je cherche la phrase la plus longue.

          Bon ce code est un peu bancale vu qu'il ne prend pas en compte la ponctuation, que la dernière phrase à toujours un point et pas les autres, puis encore pas mal de défaut mais après en utilisant un peu la fonction replace je pense que ça devrait être vite fini.
          Par exemple, pour virer tous les espaces dans le tableau que tu as eu avec split, tu fais simplement :
          for i in range(len(phrases)):
          	phrases[i] = phrases[i].replace(" ","")
          

          Avec ça tu devrais pouvoir supprimer les caractères que tu ne dois pas compter rapidement.
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2010 à 12:12:29

            Pour trouver la chaîne la plus longue, max(liste, key=len) sera plus approprié.
            • Partager sur Facebook
            • Partager sur Twitter
            yjltg.
            Anonyme
              31 août 2010 à 14:20:29

              Salut,
              On peut penser à un programme comme ceci :
              #!/usr/bin/python
              # -*- coding:utf-8 -*-
              
              phrases = raw_input ('Entrez des phrase au hasard sans "!" ni "?" : ')
              phrases = phrases.split ('. ')
              
              plusLong = [0, 0]
              for i in range (len (phrases)):
                  if len (phrases [i]) > plusLong [0]:
                      plusLong [0] = len (phrases [i])
                      plusLong [1] = i
                  else:
                      pass
              
              print phrases [plusLong [1]]
              

              Au final, ce code donne :
              Entrez des phrase au hasard sans "!" ni "?" : Bonjour. Je m'appelle programmateur. Je vous montre un exemple. Au revoir.
              Je m'appelle programmateur
              


              Au revoir ;) !
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                31 août 2010 à 14:57:24

                Je ne vois pas l'intérêt de faire ce genre d'exercice si il n'y pas une difficulté réelle du problème.

                Ne pas mettre "?" et "!" c'est irréel, le but est simple et complexe à la fois.

                Il faut détecter le début d'une phrase et sa fin, sinon ça merde vos codes.

                En gros, vous avez une chaine de caractères :

                ch="Bonjour comment allez-vous? Je vais bien merci, et vous? Ca va merci. Je ne suis pas d'accord! Ah bon..."
                


                On détecte chaque phrase, puis on la traite pour annoncer la plus longue phrase.

                :)
                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2010 à 18:12:26

                  max(map(lambda a:split(a, '!'), map(lambda a:split(a, '?'), CHAINE.split('.')), key=len)

                  J'ai tapé ca sur le pouce - pas sûr que ca marche -, c'est moche. Mais le concept est là.


                  Edit: Totalement affreux.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  yjltg.
                  Anonyme
                    31 août 2010 à 20:27:08

                    hum bizarre cette forme de split

                    Je la verrais plus comme

                    fonc=lambda ch:ch.split('!')
                    


                    et je ne comprend pas d'où vient la variable a et le rapport avec CHAINE?

                    et je ne suis pas sûr, mais si tu splittes les !, il fau ensuite prendre ce résultat pour splitter la suite des autres ponctuations, non?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 septembre 2010 à 13:35:17

                      Euh, oui, j'étais fatigué, désolé.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      yjltg.
                        1 septembre 2010 à 23:04:46

                        Bon... J'ai fini par trouvé la solution, soit le fait de trouver la phrase la plus longue dans un fichier texte.

                        def boucle0():
                            global Liste
                            max,a=0,0
                        
                            while (a < len(Liste)):
                                if (Liste[a] > max):
                                    max = Liste[a]
                                a +=1
                            print (max)
                        
                        
                        
                        def boucle():
                         global x, Liste, y
                         
                         while 1:
                          
                           txt  = ObjetF.read(1)
                           x+=txt
                           y+=1
                        
                           if (txt == '\n' or txt == ''):
                                Liste.append(y)
                                y=-1
                                
                           if (txt == ''):
                                print(x)
                                print(Liste)
                                boucle0()
                                break
                                
                        
                          
                          
                        x=''
                        Liste=[]
                        y=0
                        ObjetF = open("Monfichier")
                        boucle()
                        

                        Par exemple dans un fichier qui comporte les phrases:

                        La racine carrée de 9 est 3.
                        La capital du Japon est Tokyo.
                        La programmation c'est pas pour les noobs.
                        Chuck Norris est grand.




                        Le résultat est:

                        La racine carrée de 9 est 3.
                        La capital du Japon est Tokyo.
                        La programmation c'est pas pour les noobs.
                        Chuck Norris est grand.
                        [29, 30, 42, 23]
                        42

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          1 septembre 2010 à 23:23:24

                          Tu as testé ton code avec mon exemple de chaîne de caractères?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 septembre 2010 à 2:57:02

                            Mais bon dieu ce code :waw:

                            J'adore la fonction max recodée et nommée "boucle0", super explicite :-°

                            T'as débuté avec VB ?

                            EDIT : En fait tu voulais séparer les lignes, pas les phrases. (le fait qu'il y ait une phrase par ligne n'est pas utilisé dans ton code, tu sépare aux sauts de lignes).

                            EDIT : Exemple un peu plus concis :
                            ObjetF = open("Monfichier")
                            texte = ObjetF.read()
                            ObjetF.close()
                            
                            len(max(phrases.split('\n'), key=len))
                            


                            Version plus tolérante aux fichiers énormes (Python 3):

                            phrase_longue = ""
                            with open("test.py", 'r') as fp:
                                for l in fp:
                                    phrase_longue = max(phrase_longue, l)
                            
                            print(len(phrase_longue))
                            
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Blond, bouclé, toujours le sourire aux lèvres...

                            Analyse du nombre de caractère dans une phrase..

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown