基本的に、テキストファイル「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 ではチェックされません。代わりに、私のプログラムはすべてのファイルをチェックします。