Per svolgere questo esercizio sono state utilizzate le seguente librerie (che devono essere installate, prima di eseguire il codice):
pandas
matplotlib
Una volta eseguito il codice, l’utente può scegliere tra una lista di funzioni disponibili che vengono stampate a schermo, semplicemente inserendo il numero corrispondente.
Per semplicità il calcolo della distribuzione empirica e dell’indice di coincidenza e dell’entropia della distribuzione degli m-grammi è stato accorpato in un’unica funzione tra quelle che possono essere scelte dall’utente. Questo poichè per il calcolo dell’indice di coincidenza e dell’entropia è necessaria la distribuzione empirica.
Il programma prende in ingresso un file txt passatogli dall’utente (deve essere inserito il path) tramite la funzione Python:
def get_text_file():
file_name = input("...")
'''some code'''
Il testo del file viene processato e viene effettuato il conteggio delle occorrenze di ciascuna lettera dell’alfabeto.
Il dizionario creato dalle frequenze viene utilizzato per generare un’istogramma tramite le funzioni della libreria matplotlib
, in cui sulle ascisse sono riportate le lettere in ordine alfabetico invece sulle ordinate è riportata la relativa frequenza.
La funzione nel codice che genera l’istogramma è:
def create_frequencies_histogram(data):
counts = Counter(data)
'''some code'''
In particolare nell’esercizio proposto era richiesto di mostrare i risultati ottenuti per il primo capitolo di “Moby Dick”. L’istogramma risultante è dunque il seguente:
Il programma prende in ingresso un file txt passatogli dall’utente (deve essere inserito il path) e da esso vengono generati tutti gli m-grammi tramite la seguente funzione:
def generate_grams(text, m):
'''some code'''
Una volta trovato gli m-grammi, è possibile calcolare la distribuzione empirica dei m-grammi, definita come segue:
Nel codice la funzione che calcola tale distribuzione empirica dei m-grammi è:
def get_empirical_distribution(text, m):
'''some code'''
Per quanto riguarda l’indice di coincidenza delle distribuzioni dei m-grammi è possibile notare che il testo analizzato è sufficientemente lungo tale da definire la formula come segue:
Nel codice la funzione che calcola tale indice di coincidenza delle distribuzioni dei m-grammi è:
def get_coincidence_index(empirical_distribution):
'''some code'''
Invece per quanto riguarda l’entropia delle distribuzioni dei m-grammi la formula utililizzata è quella dell’entropia di Shannon:
E nel codice la funzione che calcola tale entropia delle distribuzioni dei m-grammi è:
def get_entropy(empirical_distribution):
'''some code'''
To run the project:
python3 TextFrequencyAnalysis.py