Cálculo de frecuencia de palabras en múltiples archivos

Estoy escribiendo un código, para contar la frecuencia de las ocurrencias de palabras en un documento que contiene alrededor de 20000 archivos, puedo obtener la frecuencia general de una palabra en el documento y mi código hasta ahora es:

import os import re import sys sys.stdout=open('f2.txt','w') from collections import Counter from glob import iglob def removegarbage(text): text=re.sub(r'\W+',' ',text) text=text.lower() return text folderpath='d:/articles-words' counter=Counter() for filepath in iglob(os.path.join(folderpath,'*.txt')): with open(filepath,'r') as filehandle: counter.update(removegarbage(filehandle.read()).split()) for word,count in counter.most_common(): print('{} {}'.format(word,count)) 

Pero, quiero modificar mi contador y actualizarlo solo una vez para cada archivo, es decir, el recuento debe corresponder a 0 o 1 para que se produzca o no en un archivo del documento. por ejemplo: la palabra “pequeño”, aparece 3 veces en el archivo 1, y 8 veces en el archivo 45, por lo tanto, el valor de conteo debe ser 2, no 11, pero mi código actual muestra 11.

Utilizar sets :

 for filepath in iglob(os.path.join(folderpath,'*.txt')): with open(filepath,'r') as filehandle: words = set(removegarbage(filehandle.read()).split()) counter.update(words) 

Un set contiene solo valores únicos:

 >>> strs = "foo bat foo" >>> set(strs.split()) set(['bat', 'foo']) 

Ejemplo usando collections.Counter . collections.Counter :

 >>> c = Counter() >>> strs = "foo bat foo" >>> c.update(set(strs.split())) >>> strs = "foo spam foo" >>> c.update(set(strs.split())) >>> c Counter({'foo': 2, 'bat': 1, 'spam': 1})