Strumenti Utente

Strumenti Sito


distribuzione_delle_frequenze

Distribuzione delle frequenze

Esemplificazione su una singola frase. Si noti, innanzitutto, la funzione set(), che crea un insieme privo di elementi ripetuti. La lunghezza della frase 'splittata' equivale al numero di parole-token (occorrenze), mentre la lunghezza dell'insieme ottenuto attraverso la funzione set() equivale al numero di parole-type (forme). Si noti, inoltre, la sintassi della riga 10 detta 'comprensione di lista' (ingl. 'list comprehension', cf. documentazione).

frequenze_frase.py
import matplotlib.pyplot as plt
frase='quando un uomo con la pistola incontra un uomo con il fucile quello con la pistola è un uomo morto'
print(frase)
#Se si è in ambiente shell 
#(interfaccia a riga di comando richiamabile da terminale/prompt dei comandi)
#anziché utilizzare il comando “print” è possibile digitare solamente
#il nome della variabile di cui si vuole ispezionare il valore. 
#Ad es., anziché digitare “print(frase)”INVIO basta digitare “frase”INVIO.
frase=frase.split()
print(frase)
print(len(frase))
print(set(frase))
print(len(set(frase)))
print(frase.count('con'))
fd=[frase.count(i) for i in set(frase)]
print(fd)
fd.sort(reverse=True)
print(fd)
sequenza=range(1,len(fd)+1)
for i in sequenza: print(i)
plt.plot(sequenza,fd,'.')
plt.show()

Applicazione al testo 'Pinocchio':

frequenze_pinocchio.py
import re
import matplotlib.pyplot as plt
f = open('testi/collodi_pinocchio.txt', mode='r', encoding='iso-8859-1')
testo = f.read()
testo=testo[1704:]
 
# istruzioni per l'affinamento della tokenizzazione
testo=re.sub("'","' ", testo)
testo=re.sub("([^\.]+)([\.,;:\!-]+)","\g<1> \g<2>", testo)
testo=testo.lower()
# fine istruzioni per l'affinamento della tokenizzazione
 
testo=testo.split()
fd=[testo.count(i) for i in set(testo)]
fd.sort(reverse=True)
plt.plot(range(1,51),fd[0:50],'.')
plt.show()

Il codici seguente usano una lista di tuple, denominata “occ_forma”, di struttura (numero_occorrenze, forma) per ordinare contemporaneamente, secondo l'ordine decrescente di frequenza, tanto i valori di frequenza quanto le forme secondo la frequenza. In questo modo è possibile creare una lista di forme ordinata per frequenza, denominata 'forme', da usare per le etichette dell'asse orizzontale del grafico (mediante la funzione plt.xticks).

frequenze_etichettate_frase.py
frase='quando un uomo con la pistola incontra un uomo con il fucile quello con la pistola è un uomo morto'
frase=frase.split()
occ_forma=[(frase.count(i),i) for i in set(frase)]
print(occ_forma)
occ_forma.sort(reverse=True)
print(occ_forma)
fd=[i[0] for i in occ_forma]
forme=[i[1] for i in occ_forma]
plt.plot(range(len(fd)),fd, '.')
plt.xticks(range(len(fd)),forme, rotation='vertical')
plt.show()
frequenze_etichettate_pinocchio.py
import matplotlib.pyplot as plt
f = open('testi/collodi_pinocchio.txt', mode='r', encoding='iso-8859-1')
testo = f.read()
testo=testo[1704:]
# istruzioni per l'affinamento della tokenizzazione
testo=re.sub("'","' ", testo)
testo=re.sub("([^\.]+)([\.,;:\!-]+)","\g<1> \g<2>", testo)
testo=testo.lower()
# fine istruzioni per l'affinamento della tokenizzazione
 
testo=testo.split()
occ_forma=[(testo.count(i),i) for i in set(testo)]
occ_forma.sort(reverse=True)
fd=[i[0] for i in occ_forma]
forme=[i[1] for i in occ_forma]
n=50
plt.plot(range(n),fd[0:n], '.')
plt.xticks(range(n),forme[0:n], rotation='vertical')
plt.show()
distribuzione_delle_frequenze.txt · Ultima modifica: 2021/10/29 21:21 da deleteme