Questa è una vecchia versione del documento!
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).
import matplotlib.pyplot as plt frase=u'quando un uomo con la pistola incontra un uomo con il fucile quello con la pistola è un uomo morto' print frase 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 print range(10) print range(1,11) plt.plot(range(1,len(fd)+1),fd,'-') plt.show()
Applicazione al testo 'Pinocchio':
import codecs import re import matplotlib.pyplot as plt file=codecs.open('Testi/collodi_pinocchio.txt', encoding='iso-8859-1', mode='r') testo=file.read() testo=testo[1758:] testo=re.sub("'","' ", testo) testo=re.sub("([^\.]+)([\.,;:\!-]+)","\g<1> \g<2>", testo) testo=testo.lower() 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).
frase=u'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()
import codecs import matplotlib.pyplot as plt file=codecs.open('Documents/collodi_pinocchio.txt', encoding='iso-8859-1', mode='r') testo=file.read() # 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()