Questa è una vecchia versione del documento!
Formula della probabilità congiunta applicata ai bigrammi: $$ 1)\hspace{4pt} P(x_{t}=a,\hspace{4pt}x_{t+1}=b)=P(x_{t+1}=b\hspace{4pt}|\hspace{4pt} x_{t}=a)P(x=a) $$ Probabilità condizionata (discende da 1): $$ 2)\hspace{4pt} P(x_{t+1}=b\hspace{4pt}|\hspace{4pt} x_{t}=a)= \frac{P(x_{t}=a,\hspace{4pt}x_{t+1}=b)}{P(x=a)} $$
Mutua informazione puntuale: $$ 3)\hspace{4pt} IMP=log_{2}\hspace{4pt}\frac{P(x_{t+1}=b\hspace{4pt}|\hspace{4pt} x_{t}=a)}{P(x=b)} $$ Sostituendo in base a 2): $$ 4)\hspace{4pt} IMP=log_{2}\hspace{4pt}\frac{P(x_{t}=a,\hspace{4pt}x_{t+1}=b)}{P(x=a)P(x=b)} $$ In base alla definizione dell'informazione: $$ 5a)\hspace{4pt} I(x=a)\hspace{4pt}=\hspace{4pt}log_{2}\hspace{4pt}\frac{1}{P(x=a)}\hspace{4pt}=\hspace{4pt}-log_{2}P(x=a) $$ Da 4) e 5a), per le proprietà dei logaritmi: $$ 5b)\hspace{4pt} IMP\hspace{4pt}=\hspace{4pt} log_{2}\hspace{4pt}\frac{1}{P(x=a)}\hspace{4pt}+\hspace{4pt}log_{2}\hspace{4pt}\frac{1}{P(x=b)}\hspace{4pt} +\hspace{4pt} log_{2}\hspace{4pt} P(x_{t}=a,\hspace{4pt}x_{t+1}=b) \hspace{4pt} =$$ $$= \hspace{4pt} I(x=a)+I(x=b)-I(x_{t}=a,\hspace{4pt}x_{t+1}=b) $$
Se le probabilità dei due elementi del bigramma sono perfettamente indipendenti l'una dall'altra allora: $$ 6a)\hspace{4pt} P(x_{t+1}=b\hspace{4pt}|\hspace{4pt} x_{t}=a)= P(x=b) $$ Da 3) e 6a): $$ 6b)\hspace{4pt} IMP\hspace{4pt}=\hspace{4pt}log_{2}\hspace{4pt}\frac{P(x=b)}{P(x=b)}\hspace{4pt}=\hspace{4pt}log_{2}\hspace{4pt}1=0 $$
Se, data la conoscenza del primo elemento, si ha la certezza dell'occorrenza del secondo allora: $$ 7a) \hspace{4pt} P(x_{t+1}=b\hspace{4pt}|\hspace{4pt} x_{t}=a)= 1 $$ Da 3) e 7a): $$ 7b)\hspace{4pt} IMP\hspace{4pt}=\hspace{4pt}log_{2}\hspace{4pt}\frac{1}{P(x=b)}\hspace{4pt}=\hspace{4pt}I(x=b) $$
import re from numpy import log2 #preparazione del testo "Pinocchio" f=open('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() #funzioni def NGRAMMI (n, testo): return [tuple(testo[i:i+n]) for i in range(len(testo)+1-n)] def I (x, testo): return -log2(testo.count(x)/len(testo)) def IMP (a,b,testo): bigrammi = NGRAMMI(2,testo) return I(a,testo) + I(b,testo)-I((a,b),bigrammi) #test print("IMP di 'il burattino'") print(IMP('il', 'burattino', testo)) print("\n") print("IMP di 'capelli turchini'") print(IMP('capelli', 'turchini', testo)) print("\n") print("IMP di 'è di'") print(IMP('è', 'di', testo)) print("\n")
import re from numpy import log2 #preparazione del testo "Pinocchio" 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() #funzioni NGRAMMI = lambda n, testo: [tuple(list(['$$$']*(n-1)+testo)[i:i+n]) for i in range(len(testo))] I = lambda x, testo: -log2(testo.count(x)/len(testo)) bigrammi = NGRAMMI(2,testo) print("IMP di 'il burattino'") print(I('il',testo) + I('burattino',testo)-I(('il','burattino'),bigrammi)) print("\n") print("IMP di 'capelli turchini'") print(I('capelli',testo) + I('turchini',testo)-I(('capelli','turchini'),bigrammi))