-1

次の形式の辞書があります。

d[class name]=(list of files)

元:

d[earn]=(6,7,4)

ここで、6.txt、7.txt、および 4.txt は、「獲得」クラスに属するファイルです。

ここで、次のような別の辞書 d2 を作成する必要があります。

d2[earn]=(12,3,2,17)

どこ

  • 12 は 6.txt で「稼ぐ」という単語が出現する回数です。
  • 3 は、7.txt で「稼ぐ」という単語が出現する回数です。
  • 4 は、4.txt で「稼ぐ」という単語が出現する回数です。
  • 17 は、3 つのファイルすべてで「earn」という単語が出現する回数です。合計。

これが私のコードです:

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()

with open('topics.txt') as f:
    d= collections.defaultdict(list)
    for line in f:
        value, *keys = line.strip().split('~')
        for key in filter(None, keys):
            d[key].append(value+".txt")

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 word, counts in word_count_dict.items():
    print(word, counts['total'])

d2 を出力する必要がありますが、コードが機能しません。

4

1 に答える 1

0

これはあなたが探していることをするはずだと思います:

from collections import defaultdict
d2 = defaultdict(list)
for word,files in d.items():
    for fname in files: #go over each file name in the 'list' which was associated with the key 'word' in d
        with open(fname) as f: 
            d2[word].append(f.read().count(word)) #add the count of the word in the file
           #d2[word].append(f.read().split().count(word)) use this if you want words not occurances of 'word' in the file
    d2[word].append(sum(d2[word])) #add the sum of all the counts
print d2
于 2013-06-22T14:35:10.383 に答える