Strumenti Utente

Strumenti Sito


entropia_degli_n-grammi

Entropia degli n-grammi

Funzioni della teoria dell'informazione

n_grammi.py
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

entropia_degli_n-grammi.txt · Ultima modifica: 2024/07/08 09:09 da admin