Esercitazione: indici statistici del testo e misure di associazione

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.