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='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':
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).
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()
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('[\.,;:\-?!]{1}','',testo)#elimina gli interpunti 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()