====== Entropia degli n-grammi ======
===== Funzioni della teoria dell'informazione =====
from numpy import log2
import pickle
import matplotlib.pyplot as plt
#Funzioni della teoria dell'informazione
I = lambda p: -log2(p) #informazione
H = lambda x: sum(p*I(p) for p in x if p>0) #entropia
def DP(x): #distribuzione di probabilità
l=len(x)
s=set(x)
return [x.count(i)/l for i in s]
#Funzioni relative agli NGRAMMI
def NGRAMMI(n,testo):
l=len(testo)
segnaposti=['$$$']*(n-1)
testo=segnaposti+testo
return [tuple(testo[i:i+n]) for i in range(l)]
with open('Testi/collodi_pinocchio.pkl','rb') as f:
testo=pickle.load(f)
H1= H(DP(testo))
print(H1)
H2= H(DP(NGRAMMI(2,testo)))
print(H2)
H3= H(DP(NGRAMMI(3,testo)))
print(H3)
H4= H(DP(NGRAMMI(4,testo)))
print(H4)
plt.bar(range(1,4+1),[H1,H2,H3,H4])
plt.show()
Dovrebbero comparire i seguenti risultati:
9.702194889011581
14.065274797090632
15.063007803309242
15.24336330939696
{{::n_grammi.png?877|}}