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.
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 ...
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.
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.
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).
Excellent ce code .
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.
@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
#...
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
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.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.