Linguistica Computazionale Esercitazione: indici statistici del testo e misure di associazione
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. NB: Da NLTK 3.0 in poi bigrams() NON restituisce una lista ma un oggetto bigrams che può essere trasformato in una lista con la funzione list(). Quindi nel caso dell'esempio sopra: list(bigrams(testo))
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 Da NLTK3: list(bigrams(testotokenizzato1))
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 Da NLTK3: list(bigrams(testotokenizzato))
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.