#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Nov 3 10:18:25 2020 @author: andrea """ # per estrarre le parole da un testo # individuo i caratteri non alfabetici diversi da accapo # li sostituisco nel testo con spazio # splitto il testo in parole def estrai_parole(testo): for c in estrai_spuri(testo): testo = testo.replace(c, ' ') return testo.split() # per individuare i caratteri non alfabetici def estrai_spuri(testo): caratteri = set(testo) return { c for c in caratteri if not c.isalpha() and c != '\n' } # raccolgo i caratteri del testo # ed elimino quelli alfabetici e lo '\n' def estrai_spuri_2(testo): caratteri = set(testo) risultato = set() for c in caratteri: if not c.isalpha() and c != '\n': risultato.add(c) return risultato testi = { 'files/holmes.txt' : 'utf-8-sig', 'files/alice.txt' : 'utf-8-sig', 'files/frankenstein.txt' : 'utf-8-sig', 'files/alice_it.txt' : 'latin', 'files/prince.txt' : 'utf-8-sig' } # per contare la frequenza relativa di un certo gruppo di parole # in un certo gruppo di file def conta_frequenza_parole(filenames, parole): # costruisco un dizionario { file: dizionario di frequenze} risultato = {} # ripeto per ciascun file for filename in filenames: # leggo ciascun file con l'encoding giusto testo = leggi_file(filename) # lo converto in minuscole testo = testo.lower() # lo spezzo in parole words = estrai_parole(testo) # conto la percentuale di presenze di ciascuna parola cercata in quel file risultato[filename] = calcola_frequenze_file(words, parole) # e l'aggiungo al dizionario # torno il risultato return risultato # per leggere il file con l'encoding giusto def leggi_file(filename): # apro il file prendendo l'encoding dal dizionario 'testi' # e lo leggo with open(filename, encoding=testi[filename]) as FILE: return FILE.read() # per contare la percentuale di presenze date le parole contenute e le parole cercate def calcola_frequenze_file(parole_file, parole_cercate): # costruisco un dizionario {parola : frequenza} risultato = {} L = len(parole_file) # per ogni parola cercata ne conto il numero nelle parole for parola in parole_cercate: # e la percentuale รจ ottenuta dividento per il #parole del file risultato[parola] = parole_file.count(parola)/L parole_da_cercare = [ 'monster' , 'blood', 'alice', 'turtle', 'cappellaio' ] nomi_file = testi.keys() print(conta_frequenza_parole(nomi_file, parole_da_cercare)) # torno il risultato return risultato if __name__ == '__main__': parole_da_cercare = [ 'monster' , 'blood', 'alice', 'turtle', 'cappellaio' ] nomi_file = testi.keys() print(conta_frequenza_parole(nomi_file, parole_da_cercare))