Python 马尔可夫模型

Python 马尔可夫模型,python,nltk,probability,markov,Python,Nltk,Probability,Markov,我必须在语料库上运行Markov 0和1模型,并以最大概率计算两个句子。 我的代码运行,但结果始终为0.0,它适用于标记,而不是句子 代码如下: def FrasiAccettabili(frasi, testoTokenizzato): frasiLunghe=[] frasiBuone=[] for frase in frasi: tokens=nltk.word_tokenize(frase) if len(tokens)>9: frasiLu

我必须在语料库上运行Markov 0和1模型,并以最大概率计算两个句子。 我的代码运行,但结果始终为0.0,它适用于标记,而不是句子

代码如下:

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]
def frasiacettabili(frasi,testoTokenizzato):
frasiLunghe=[]
frasiBuone=[]
对于frasi中的frase:
令牌=nltk.word\u令牌化(frase)
如果len(代币)>9:
frasiLunghe.append(frase)
对于frasiLunghe的fraseBuona:
tokenBuoni=True
token=nltk.word\u tokenize(fraseBuona)
对于tok in令牌:

如果testoTokenizzato.count(tok)你不小心写了一个程序,它可以在记号上工作,而不是在句子上工作?我想是的!因为当程序运行时,它总是以0.0的概率打印一个单词,而不是一个句子。