I have to run a Markov 0 and 1 model on a corpus, and calculate the two sentences with the highest probability. My code run, but the result is always 0.0 and it works on tokens, not sentences.
Here is the code:
def FrasiAccettabili(frasi, testoTokenizzato):
frasiLunghe=[]
frasiBuone=[]
for frase in frasi:
tokens=nltk.word_tokenize(frase)
if len(tokens)>9:
frasiLunghe.append(frase)
for fraseBuona in frasiLunghe:
tokenBuoni=True
token=nltk.word_tokenize(fraseBuona)
for tok in token:
if testoTokenizzato.count(tok)<=2:
tokenBuoni=False
if tokenBuoni==True:
frasiBuone.append(fraseBuona)
return frasiBuone
def ProbabilitaFraseMarkov0(lunghezzaCorpus, testoTokenizzato, frasi):
frasiProbabilita=[]
probabilita=1.0
for frase in frasi:
tokens = nltk.word_tokenize(frase)
for tok in tokens:
probabilitaToken= testoTokenizzato.count(tok)*1.0/lunghezzaCorpus*1.0)
probabilita=probabilita*probabilitaToken
frasiProbabilita.append((frase, probabilita))
return frasiProbabilita
def ProbabilitaFraseMarkov1(lunghezzaCorpus, testoTokenizzato, frasi):
frasiProbabilita=[]
bigrammiCorpus = list(bigrams(testoTokenizzato))
for frase in frasi:
tokens=nltk.word_tokenize(frase)
probabilitaFrase=(testoTokenizzato.count(tokens[0])*1.0)/(lunghezzaCorpus*1.0)
bigrammiFrase=list(bigrams(tokens))
for bigramma in bigrammiFrase:
frequenzaBigramma=bigrammiCorpus.count(bigramma)
frequenzaPrimoElemento=testoTokenizzato.count(bigramma[0])
probabilitaBigramma=(frequenzaBigramma*1.0)/(frequenzaPrimoElemento)
probabilitaFrase=probabilitaFrase*probabilitaBigramma
frasiProbabilita.append((frase, probabilitaFrase))
return frasiProbabilita
def main(file1, file2):
fileInput1 = codecs.open(file1, "r", "utf-8")
fileInput2 = codecs.open(file2, "r", "utf-8")
raw1 = fileInput1.read()
raw2 = fileInput2.read()
sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
frasi1 = sent_tokenizer.tokenize(raw1) #tokenizzazione
frasi2 = sent_tokenizer.tokenize(raw2)
frasiValideC1 = FrasiAccettabili(frasi1, tokensTotC1)
Markov0C1 = set(ProbabilitaFraseMarkov0(lunghezzaC1, frasiValideC1, tokensTotC1))
frasiOrdC1 = sorted(Markov0C1, key=lambda x:x[1], reverse=True)
fraseProbMAXC1 = frasiOrdC1[0]
frasiValideC2 = FrasiAccettabili(frasi2, tokensTotC2)
Markov0C2 = set(ProbabilitaFraseMarkov0(lunghezzaC2, frasiValideC2, tokensTotC2))
frasiOrdC2 = sorted(Markov0C2, key=lambda x:x[1], reverse=True)
fraseProbMAXC2 = frasiOrdC2[0]
Markov1C1 = set(ProbabilitaFraseMarkov1(lunghezzaC1, frasiValideC1, tokensTotC1))
frasiOrdinateC1 = sorted(Markov1C1, key=lambda x:x[1], reverse=True)
fraseProbMAX1C1 = frasiOrdinateC1[0]
Markov1C2 = set(ProbabilitaFraseMarkov1(lunghezzaC2, frasiValideC2, tokensTotC2))
frasiOrdinateC2 = sorted(Markov1C2, key=lambda x:x[1], reverse=True)
fraseProbMAX1C2 = frasiOrdinateC2[0]