Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableau associatif multidimensionnel

    14 décembre 2011 à 10:27:47

    Bonjour,

    Je souhaire créer un tableau associatif "multimdimensionnel". Je m'explique:
    Je souhaite identifier la présence de mots dans n documents (1 si le mot est présent et 0 sinon).
    Mon tableau ressemblerait pour 3 documents à :
    "voici" -> 0, 1, 0
    "mon" -> 0, 0, 1
    "mot" -> 1, 1, 1

    Si je veux vérifier que le mot "voici" est présent dans le document n, je pourrais vérifier la valeur de la variable monTabeau["voici"][n].
    Je précise que le n est fixe et identique quelque soit l'indice.

    Merci d'avance,

    Romain
    • Partager sur Facebook
    • Partager sur Twitter
      14 décembre 2011 à 11:29:08

      Il suffit d'associer une liste à chaque mot dans un dictionnaire… où est le problème ?
      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        14 décembre 2011 à 11:49:21

        ou l'inverse...

        tableau = {
        doc0: ["mot"],
        doc1: ["voici","mot"],
        doc2: ["mon","mot"]
        }
        


        si j'ai bien compris tu as N docs et une liste de mots "mots" à classer:

        >>> doc0 = "cela est un mot"
        >>> doc1 = "voici un mot"
        >>> doc2 = "cela est mon mot"
        >>> 
        >>> mots = "voici","mon","mot"
        >>> 
        >>> docs = dict([(d,[])for d in docs])
        >>> [docs[d].append(m) for d in docs for m in mots if m in d]
        [None, None, None, None, None]
        >>> docs
        {'cela est mon mot': ['mon', 'mot'], 'cela est un mot': ['mot'], 'voici un mot': ['voici', 'mot']}


        les clés de docs seraient des noms de fichiers ...
        • Partager sur Facebook
        • Partager sur Twitter

        Python c'est bon, mangez-en. 

          14 décembre 2011 à 13:10:36

          Merci pour vos réponses.
          Python était pour moi rien de plus qu'un animal jusqu'à ce matin 8 heures, voilà pourquoi j'ai un peu de mal :) .
          Voici ce que j'ai fait pour un document :
          myDic={}
          for line in open('/home/rom/Documents/Studies/Master 2 Blois/Information retrieval/Project/texts/tagged/comp.sys.ibm.pc.hardware/58343.txt'):
           	words = line.strip().split('\t')
           	word=words[0]
           	#local dictionnary
           	if word in myDic:
          		myDic[word]+=1
          	else:
          		myDic[word]=1
          print "1st d
          
          oc:\n"
          print myDic

          Ok j'ai regardé la documentation pour les listes, j'ai plus ou moins compris. Mais je ne sais pas comment intégrer une liste à un dictionnaire.

          Edit : Ma liste pour chaque entrée dans le dictionnaire, ainsi que chaque entrée, est construite au fur et à mesure que je parcours chaque document. C'est ça qui me bloque en fait.

          Merci encore pour votre aide.
          • Partager sur Facebook
          • Partager sur Twitter
            14 décembre 2011 à 14:21:31

            dis-nous ce que tu veux faire en français(l' algo), parce que ce code je pige que dalle ...
            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              14 décembre 2011 à 15:06:48

              Alors j'ai un ensemble de documents que je parcours.
              Pour chaque document, si un mot nouveau apparaît alors on le stocke dans un dictionnaire.
              Pour chaque mot, je veux expliquer dans quel document on trouve ce mot (1 si le mot se trouve dans le document n et 0 sinon).
              Voilà pourquoi il me faut un dictionnaire pour les mots. Et pour chaque mot il faut une liste (?) pour dire si ce mot existe dans chaque document parcouru.

              Ainsi si on a maVariable["donc"](1,0,1), cela veut dire que le mot "donc" existe dans le document 1 et 3 mais pas dans le 2.

              J'espère avoir été clair. Sinon n'hésitez pas !

              Romain
              • Partager sur Facebook
              • Partager sur Twitter
                14 décembre 2011 à 15:25:00

                Si le but est juste de savoir si un mot est présent ou non dans le document (que tu n'as pas besoin de les compter), alors tu n'as même pas besoin de dictionnaires, mais plutôt d'une liste de sets.

                Python 3.2.2 (default, Nov 21 2011, 16:51:01)
                [GCC 4.6.2] on linux2
                Type "help", "copyright", "credits" or "license" for more information.
                >>> doc1 = ["mot"]
                >>> doc2 = ["voici", "mot"]
                >>> doc3 = ["mon", "mot"]
                >>> mesdocs = [set(doc) for doc in (doc1, doc2, doc3)]
                >>> recherche = lambda mot: [mot in doc for doc in mesdocs]
                >>> recherche("voici")
                [False, True, False]
                >>> recherche("mon")
                [False, False, True]
                >>> recherche("mot")
                [True, True, True]
                


                L'avantage de le faire dans ce sens là, c'est que tu n'as qu'à rajouter un set dans la liste chaque fois que tu veux gérer un nouveau document, alors qu'avec des dictionnaires il faudrait rajouter un élément dans m listes (avec m le nombre de mots total).
                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  14 décembre 2011 à 19:10:41

                  Excellent ce code :D .
                  Je commence à comprendre la puissance de ce langage. Très peu d'instructions suffisent pour faire beaucoup :) .
                  Maintenant si je veux compter les mots, quelle structure de données faut-il prendre ?
                  J'imagine que la création des variables ainsi que le code de remplissage d'une ligne me suffira ;) .
                  Merci encore.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    14 décembre 2011 à 19:19:07

                    recherche("voici").count(True)
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 décembre 2011 à 19:29:30

                      @fred1599 -> ce code c'est pour compter à partir d'une structure déjà faite si je comprends bien (je le note dans un coin, ça pourra me servir ;) ).
                      Moi je veux créer le structure au fur et à mesure que je lis des documents.
                      Exemple de résultat : maVariable["donc"](1,2,0,...). Le mot "donc" apparait une fois dans le premier document, deux fois dans le deuxième, pas dans le troisième...
                      Voici le début du code pour chaque document :

                      myDic={}
                      
                      for line in open('doc1.txt'):
                       	words = line.strip().split('\t')
                       	word=words[0]
                              #pour chaque mot, je modifie ma structure de données
                              #...
                      
                      for line in open('doc2.txt'):
                       	words = line.strip().split('\t')
                       	word=words[0]
                              #pour chaque mot, je modifie ma structure de données
                              #...
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 décembre 2011 à 10:38:41

                        Citation : rom117

                        Maintenant si je veux compter les mots, quelle structure de données faut-il prendre ?


                        Si j'ai bien compris ta question, le plus simple, c'est :

                        >>> from collections import Counter
                        >>> words = ["tut", "tut", "pip"]
                        >>> count = Counter(words)
                        >>> count
                        Counter({'tut': 2, 'pip': 1})
                        >>> count["tut"]
                        2
                        >>> count["test"]
                        0
                        


                        EDIT :
                        On peut aussi faire uniquement avec un dictionnaire, par exemple :
                        >>> counter = dict()
                        >>> for word in words: counter[word] = counter.get(word, 0) + 1
                        
                        >>> counter
                        {'pip': 1, 'tut': 2}
                        >>> counter.get("pip", 0)
                        1
                        >>> counter.get("test", 0)
                        0
                        
                        • Partager sur Facebook
                        • Partager sur Twitter

                        tableau associatif multidimensionnel

                        × 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