Partage
  • Partager sur Facebook
  • Partager sur Twitter

extraction lettres

    22 juin 2022 à 0:35:50

    Bonjour,

    Est-il possible de m'indiquer s'il est possible d'effectuer avec un logiciel de programmation une extraction de lettres dans 2 mots différents ?

    Par exemple avec les mots PAPA et MAMAN, je voudrais avoir toutes les possibilités (pas obligatoirement dans un dictionnaire) et quelle que soit la disposition des 2 mots.

    = PM PA PN MP MA AM AA AN AP NP NA

    Pour mon projet, je pense me limiter à 10 mots au maximum. Si vous voyez une limite dans le nombre de mots, je m'arrangerai pour modifier mon projet de l'ordre de vos conseils.

    Merci d'avance

    Soph'

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2022 à 1:22:36

      Bien que je ne sois pas certain de comprendre exactement ce que tu veux faire, je peux dire que c'est possible.
      Mais connais-tu un langage de programmation?Je suis presque certain que je pourrais le faire en Python.
      Pour le nombre de mots, ça peut être très grand. J'ai un dictionnaire qui contient environ 325 000 mots et je peux le gérer facilement.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        22 juin 2022 à 1:31:46

        Salut,

        Ce que tu souhaites faire s'appelle une permutation.

        Il existe un module Python qui a une fonction destinée à cela. C'est le module itertools. Et la fonction est permutations()

        Pour avoir ton résultat on fait : permutations("PAPAMAMAN", 2).

        Pour le lien, je te conseille de descendre un peu pour voir les exemples. Puis de cliquer sur le lien "permutations" car on voit comment est créée la fonction.

        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2022 à 1:49:39

          J'ai pensé à ça, mais je me pose une question, doit-on prendre une lettre dans chaque mot ou si on mélange tout?
          Est-ce seulement des combinaisons (ou permutations) de 2 lettres ou plus de lettres?
          Si j'ai 10 mots ou plus, il y a risque de redondances. La fonction permutations en tient-elle compte?

          Alors, je me répond. :_)

          >>> from itertools import permutations                                                                                  
          >>> list(permutations("papa", 2))                                                                                       
          [('p', 'a'), ('p', 'p'), ('p', 'a'), ('a', 'p'), ('a', 'p'), ('a', 'a'), ('p', 'p'), ('p', 'a'), ('p', 'a'), ('a', 'p'),

          coupé ?

          edit:
          Si on les veux une fois, et triées.
           
          from itertools import permutations
          print(*sorted(set(''.join(p) for p in permutations("papamaman", 2)))))
           
          aa am an ap ma mm mn mp na nm np pa pm pn pp                                                                               

          -

          Si on veut toutes les permutations de 2 lettres, on peut avoir au maximum 676 possibilités.
          Alors, amusons-nous un peu. Si je veux prendre deux noms dans l'ordre:
           
          from itertools import combinations
          famille = ["papa", "maman", "soeur", "frere"]
          print(*list(combinations(famille, 2)))
           
          ('papa', 'maman') ('papa', 'soeur') ('papa', 'frere') ('maman', 'soeur') ('maman', 'frere') ('soeur', 'frere')          

          -
          On peut également faire des séquences du genre:
           
          sequence = lambda V: (seq:=lambda L, n: [""] if n==0 else [i+s for i in L[-n] for s in seq(L, n-1)])(V, len(V))
          L=["abc", "df", "ghi"]
          print(*sequence(L))
           
          adg adh adi afg afh afi bdg bdh bdi bfg bfh bfi cdg cdh cdi cfg cfh cfi                                                 

          -
          Edité par PierrotLeFou 22 juin 2022 à 3:59:49

          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            22 juin 2022 à 9:28:44

            Oui c'est possible assez facilement je dirais, avec n'importe quel langage de programmation.

            En gros l'algorithme serait de :

            • boucler sur les lettres du 1er mot
            • dans cette boucle créer une seconde boucle qui bouclerait sur le deuxième mot
            • et ensuite ajouter les lettres courante de la 1ère boucle avec la lettre courante de la 2ème boucle dans un tableau

            Peut-être que tu ne veux pas de doublons, dans ce cas soit tu dédoublonnes à la fin, soit avant de rajouter une nouvelle combinaison à ton tableau tu vérifie qu'elle n'est pas déjà présente.

            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2022 à 10:06:26

              CristianoRolando a écrit:

              Salut,

              Ce que tu souhaites faire s'appelle une permutation.

              Il existe un module Python qui a une fonction destinée à cela. C'est le module itertools. Et la fonction est permutations()

              Pour avoir ton résultat on fait : permutations("PAPAMAMAN", 2).

              Pour le lien, je te conseille de descendre un peu pour voir les exemples. Puis de cliquer sur le lien "permutations" car on voit comment est créée la fonction.


              Merci pour le module, je vais regarder comment l'utiliser. Je n'ai jamais utilisé un outil de programmation mais ce sera l'occasion.


              PierrotLeFou a écrit:

              J'ai pensé à ça, mais je me pose une question, doit-on prendre une lettre dans chaque mot ou si on mélange tout?
              Est-ce seulement des combinaisons (ou permutations) de 2 lettres ou plus de lettres?
              Si j'ai 10 mots ou plus, il y a risque de redondances. La fonction permutations en tient-elle compte?

              Alors, je me répond. :_)

              >>> from itertools import permutations                                                                                  
              >>> list(permutations("papa", 2))                                                                                       
              [('p', 'a'), ('p', 'p'), ('p', 'a'), ('a', 'p'), ('a', 'p'), ('a', 'a'), ('p', 'p'), ('p', 'a'), ('p', 'a'), ('a', 'p'),

              coupé ?

              edit:
              Si on les veux une fois, et triées.
               
              from itertools import permutations
              print(*sorted(set(''.join(p) for p in permutations("papamaman", 2)))))
               
              aa am an ap ma mm mn mp na nm np pa pm pn pp                                                                               

              -

              Si on veut toutes les permutations de 2 lettres, on peut avoir au maximum 676 possibilités.
              Alors, amusons-nous un peu. Si je veux prendre deux noms dans l'ordre:
               
              from itertools import combinations
              famille = ["papa", "maman", "soeur", "frere"]
              print(*list(combinations(famille, 2)))
               
              ('papa', 'maman') ('papa', 'soeur') ('papa', 'frere') ('maman', 'soeur') ('maman', 'frere') ('soeur', 'frere')          

              -
              On peut également faire des séquences du genre:
               
              sequence = lambda V: (seq:=lambda L, n: [""] if n==0 else [i+s for i in L[-n] for s in seq(L, n-1)])(V, len(V))
              L=["abc", "df", "ghi"]
              print(*sequence(L))
               
              adg adh adi afg afh afi bdg bdh bdi bfg bfh bfi cdg cdh cdi cfg cfh cfi                                                 

              -
              Edité par PierrotLeFou il y a environ 5 heures



              Merci pour les différentes possibilités.
              Dans mon projet, je prends une lettre dans chaque mot.
              En reprenant PAPA et MAMAN, une des solutions est PA, le P étant la lettre venant de PAPA et le A venant de MAMAN (le A ne peut pas venir de PAPA) mais PP n'est pas une des solutions car les deux P sont dans le mot PAPA.

              Je ne sais pas si ça modifie les possibilités ?

              Merci pour vos premières réponses.

              Soph'

              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2022 à 19:07:37

                Sauf que tu as 2 'a' dans papa et 2 'a' dans maman, tu auras donc des 'aa', non?
                Si je reprend ma fonction sequence avec seulement les mots "papa" et "maman":
                 
                sequence = lambda V: (seq:=lambda L, n: [""] if n==0 else [i+s for i in L[-n] for s in seq(L, n-1)])(V, len(V))
                L=["papa", "maman"]
                print(*sequence(L))
                 
                pm pa pm pa pn am aa am aa an pm pa pm pa pn am aa am aa an
                 
                Je pourrais générer les permutations inverses comme 'pm' -> 'mp'

                >>> L = ['pm',  'ap']                                                                                                   
                >>> L                                                                                                                   
                ['pm', 'ap']                                                                                                            
                >>> L = L + [j+i for i,j in L]                                                                                          
                >>> L                                                                                                                   
                ['pm', 'ap', 'mp', 'pa']                                                                                                
                Puis ne garder qu'une copie avec set et trier avec sorted.

                P.S. Ma fonction sequence ne marche qu'avec les versions Python 8 ou ultérieures

                Je suis sur Python 10.4.

                -
                Edité par PierrotLeFou 22 juin 2022 à 19:24:05

                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                extraction lettres

                × 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