2013-06-19 6 views
0

Je suis censé compter la fréquence de toutes les valeurs clés du dictionnaire "d" pour tous les fichiers du document "articles-individuels" Ici, le document "articles-individuels" a environ 20000 fichiers txt, avec les noms de fichiers 1, 2,3,4 ... par exemple: supposons que d [Grande-Bretagne] = [5,76,289] doit renvoyer le nombre de fois que la Grande-Bretagne apparaît dans les fichiers 5.txt, 76.txt, 289.txt appartenant au document "induvidual articles ", et aussi j'ai besoin de trouver sa fréquence à travers tous les fichiers dans le même document.comment parcourir toutes les clés du dictionnaire python?

import collections 
import sys 
import os 
import re 
sys.stdout=open('dictionary.txt','w') 
from collections import Counter 
from glob import glob 


folderpath='d:/individual-articles' 
counter=Counter() 


filepaths = glob(os.path.join(folderpath,'*.txt')) 

def words_generator(fileobj): 
    for line in fileobj: 
     for word in line.split(): 
      yield word 
word_count_dict = {} 
for file in filepaths: 
    f = open(file,"r") 
    words = words_generator(f) 
    for word in words: 
     if word not in word_count_dict: 
       word_count_dict[word] = {"total":0} 
     if file not in word_count_dict[word]: 
       word_count_dict[word][file] = 0 
     word_count_dict[word][file] += 1    
     word_count_dict[word]["total"] += 1   
for k in word_count_dict.keys(): 
    for filename in word_count_dict[k]: 
     if filename == 'total': continue 
     counter.update(filename) 

for k in word_count_dict.keys(): 
    for count in counter.most_common(): 
     print('{} {}'.format(word_count_dict[k],count)) 

Comment trouver la fréquence de la Grande-Bretagne que dans les fichiers qui sont des éléments du dictionnaire pour cette valeur clé?

i besoin de stocker ces valeurs dans un autre d2 pour le même exemple, d2 doit contenir

(Grande-Bretagne, 26,1200) (Espagne, 52,6795) (France, 45568)

où 26 est la fréquence du mot Britain dans les fichiers 5.txt, 76.txt et 289.txt et 1200 est la fréquence du mot Britain dans tous les fichiers. De même pour l'Espagne et la France.

J'utilise le compteur ici, et je pense que c'est le défaut parce que, jusqu'ici tout fonctionne bien, sauf pour ma boucle finale! Je suis un novice de python, et j'ai essayé peu de choses! aidez s'il vous plaît !!

Répondre

0

word_count_dict["Britain"] est un dictionnaire régulier. Juste boucle au-dessus:

for filename in word_count_dict["Britain"]: 
    if filename == 'total': continue 
    print("Britain appears in {} {} times".format(filename, word_count_dict["Britain"][filename])) 

ou récupérer toutes les clés avec:

word_count_dict["Britain"].keys() 

Prenez note que vous avez une total clé spéciale dans ce dictionnaire.

Il se peut que votre retrait est éteint, mais il semble que vous ne comptez pas correctement les entrées de fichier:

if file not in word_count_dict[word]: 
    word_count_dict[word][file] = 0 
    word_count_dict[word][file] += 1    
    word_count_dict[word]["total"] += 1   

serait seulement compter (+= 1) mots si file n'a pas été vu dans le par mot dictionnaire avant; exact que pour:

if file not in word_count_dict[word]: 
    word_count_dict[word][file] = 0 
word_count_dict[word][file] += 1    
word_count_dict[word]["total"] += 1   

Pour développer ce à mots arbitraires, boucle vous sur l'extérieur word_count_dict:

for word, counts in word_count_dict.iteritems(): 
    print('Total counts for word {}: '.format(word, counts['total'])) 
    for filename, count in counts.iteritems(): 
     if filename == 'total': continue 
     print("{} appears in {} {} times".format(word, filename, count)) 
+0

et supposons que j'ai plusieurs mots comme, « la Grande-Bretagne », « France », « Espagne » , et ainsi ce travail: pour k dans word_count_dict.keys(): – radhika

+0

@radhika: exactement. Là, 'k' est lui-même un dictionnaire qui nomme les noms de fichiers en nombre. –

+0

alors est-ce que ce sera correct? pour k dans word_count_dict.keys(): pour le nom de fichier dans word_count_dict [k]: si filename == 'total': continuer print (k + "apparaît dans {} {} fois" .format (nom de fichier, word_count_dict [k] [ filename])) – radhika

Questions connexes