0

基本的に、テキストファイル「topics.txt」「topics.txt」から読み取る辞書dがあり、次のパターンの行があります。

1~イギリス~イタリア~インド

2~スペイン~トルコ

3~フランス

4~エジプト~中国~日本~アイスランド

等々..

ここで、番号はファイル「1.txt」、「2.txt」などに対応し、ドキュメント「個別記事」に属します。

辞書 "d" で、ドキュメント "individual-articles" のすべてのファイルを、topics.txt で指定された単語であるクラスに分類します。

したがって、キー値が「英国」、「フランス」、「スペイン」の辞書「d」は次の形式です。

(Britain,[1,76,289]) ファイル 1.txt,76.txt,289.txt はクラス "Britain" の下にあります

(Spain,[2,8]) ファイル 2.txt,8.txt はクラス「Spain」の下にあります

(フランス、[3,99,12,43]) ファイル 3.txt、99.txt、12.txt、43.txt は「フランス」の下にあり、以下同様です。

今、私は別の辞書「word_count_dict」を作成しています。これには、クラス名と、「d」から取得できる IT'S ファイルに「クラス」が出現する回数が含まれています。

例: word_count_dict には以下が必要です:

(Britain,236) ここで、236 は「Britain」という単語がファイル 1.txt、76.txt、289.txt に現れる回数です。

(France,56) ここで、56 はファイル 3.txt、99.txt、12.txt、43.txt 内の単語「france」の出現回数です。

等々...

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'])

これまでのところ、このコードを試してみましたが、その特定のキーの d 内のファイルがチェックされているとは思いません!

output:
d2=(["Britain",45],["France",56],["Spain",89],.....)

ここで、45 はファイル内で "Britain" という単語が出現する回数です: 1.txt,76.txt,289.txt

56 は、ファイル内の「France」という単語の出現回数です: 3.txt、99.txt、12.txt、43.txt

「britain」という単語の出現頻度は、辞書「d」から取得できるファイル 1.txt、76.txt、289.txt ではチェックされません。代わりに、私のプログラムはすべてのファイルをチェックします。

4

1 に答える 1