Il codice seguente crea un grafico delle frequenze cumulate per parole tipo e parole unità analogo a quello riportato in Lenci et al. (p. 136). In verde è tracciata la curva che indica la percentuale di vocabolario rappresentata da parole tipo con frequenza minore o uguale a x; in blu è tracciata la curva che indica la percentuale di testo costituita da parole tipo con frequenza minore o uguale a x. I valori x, rappresentati sull'asse delle ascisse, sono riportati in scala logaritmica.
import re import matplotlib.pyplot as plt #Preparazione del testo f=open('testi/collodi_pinocchio.txt', mode='r', encoding='iso-8859-1') testo=f.read() testo=testo[1704:] testo=re.sub("'","' ", testo) testo=re.sub('[\.,;:\-?!]{1}','',testo) testo=testo.lower() testo=testo.split() #Elaborazione dei dati fd=[testo.count(i) for i in set(testo)] fd.sort(reverse=True) fmax=fd[0] lista_classi=range(1,fmax+1) classi_frequenza=[[i for i in fd if i<= k] for k in lista_classi] V=len(set(testo)) T=len(testo) percV=[100*len(classe)/V for classe in classi_frequenza] percT=[100*sum(classe)/T for classe in classi_frequenza] # Creazione del grafico fig=plt.figure() ax=fig.add_subplot(1,1,1) ax.set_xscale('log') ax.plot(lista_classi,percV,'g-') ax.plot(lista_classi,percV,'gd') ax.plot(lista_classi,percT,'b-') ax.plot(lista_classi,percT,'bd') ax.grid() plt.show()
Il grafico generato dovrebbe avere questo aspetto: