Linguistica Computazionale Esercitazione: indici statistici del testo e misure di associazione 12 novembre 2014 Calcolare la lunghezza di un corpus |C|: Calcolare la lunghezza di un corpus |C|: output sys.argv[0] sys.argv[1] print "Il file", file1, "è lungo", lunghezza1, "token" Trovare il token con frequenza massima: Trovare il token con frequenza massima: output sys.argv[0] sys.argv[1] print "Il token piu' frequente è:", tokenMAX, "\tcon frequenza:", freqTokenMAX Trovare il token (lungo almeno 2 caratteri) con frequenza massima: Trovare il token (lungo almeno 2 caratteri) con frequenza massima: output sys.argv[0] sys.argv[1] print "Il token piu' frequente è:", tokenMAX, "\tcon frequenza:", freqTokenMAX Esercizi: indici statistici del testo • Create un file di testo in inglese lungo almeno 500 token. • Utilizzando le funzioni di NLTK e le funzioni di base del Python scrivete un programma che: – stampi gli hapax (token che occorrono una sola volta) del file; – stampi la distribuzione degli hapax: |V1|/ |C|; – stampi il vocabolario del file ordinato alfabeticamente e per ogni elemento del vocabolario ne stampi la frequenza e la frequenza relativa nel file; – stampi il rapporto tipo-unità del testo (Type Token Ratio, TTR): |Vc|/|C|; Esercizi: indici statistici del testo Stampare l'andamento della crescita lessicale del file all'aumentare del testo (50 token per volta) per verificare la crescita non lineare del vocabolario • Stampare l'andamento della distribuzione degli hapax all'aumentare del testo (50 token per volta). • Stampare la variazione della dimensione delle classi di frequenza |V5|, |V10| e |V15| all'aumentare del testo (50 token per volta). Nb:questi utilizzando sempre lo stesso file di testo di partenza, senza creare file di testo intermedi. Python e NLTK: bigrams Per ottenere tutti i bigrammi di un testo si utilizza la funzione bigrams(listaParole) di NLTK: bigrams() prende in input una lista e restituisce una lista di tuple. Ogni tupla rappresenta un bigramma degli elementi della lista di partenza. Python: le Tuple Una tupla è simile ad una lista con una differenza: è un tipo non mutabile, cioè non è possibile aggiungere, modificare o togliere elementi ad una tupla. http://docs.python.org/tutorial/datastructures.html Stampare i bigrammi diversi di un testo e trovare il bigramma con frequenza massima: (programma) Restituisco due valori Stampare i bigrammi diversi di un testo e trovare il bigramma con frequenza massima: (output) Output: Oggetto Tupla … ... Trovare il bigramma con Probabilità Condizionata massima: (programma) In Python se dividiamo due numeri interi otteniamo un intero, per ottenere un risultato con la virgola moltiplichiamo numeratore e demoninatore per 1.0 Trovare il bigramma con Probabilità Condizionata massima: (output) Con il comando: print "Il bigramma con Prob Condizionata massima nel file", file1, "è:", bigrammaMAX, "con Probabilita:", probCondizionataMAX Stampata la struttura dati Bigramma (o Tupla) bigrammaMax Per stampare solo il contenuto: print "Il bigramma con Prob Condizionata massima nel file", file1, "è: \”", bigrammaMAX[0], bigrammaMAX[1], "\” con Probabilita:", probCondizionataMAX Funzioni Matematiche: il modulo math II modulo math contiene le funzioni matematiche non direttamente supportate da Python: http://docs.python.org/library/math.html Esercizi: • Create un file di testo in inglese lungo almeno 1000 token. • Utilizzando le funzioni di NLTK e le funzioni di base del Python scrivete un programma che: – stampi tutti i bigrammi “(u, v)” diversi presenti all'interno del file e per ogni bigramma ne stampi: • la frequenza dei token “u” e “v” e la frequenza del bigramma “(u,v)”; • la probabilità condizionata P(v|u); • la probabilità congiunta P(u,v); – stampi il bigramma con probabilità congiunta massima. Esercizi: • Utilizzando le funzioni di NLTK e le funzioni di base del Python scrivete un programma che per ognuno dei bigrammi del testo: – stampi la forza associativa (in termini di Mutual Information, MI) tra le parole che caratterizzano il bigramma: log2(P(u,v)/(P(u)*P(v))) – stampi il bigramma con forza associativa massima.