ビタビ

インポートSYS 

のNPとしてインポートnumpyの
F =オープン(sys.argvの[2]、 "R")
F2 =オープン(sys.argvの[1]、 "R")
F1 =オープン( "out.txtを"、 "W")
インポート数学
#隐状态



DEF計算(OBS、状態、start_p、trans_p、emit_p):
    max_p = np.zeros((LEN(OBS)、lenの(状態)))
    パス= np.zeros((LEN(状態)、LEN (OBS)))
    の範囲内のiについて(LEN(状態)):
        max_p [0] [I] = math.log(start_p [I])+ emit_p [I] [OBS [0] 
        のパス[I] [0 ] = I 
    の範囲(1、(OBS)LEN)におけるtについて:
        #print(T)
        newpathが= np.zeros((LEN(状態)においてlen(OBS)))
        の範囲内のyの(LEN(状態))。
            PROB = -100000000 
            範囲内Y0(LEN(状態))のために:
                nprob = max_p [T-1] [Y0] + trans_p [Y0] [Y] + emit_p [Y] [OBS [T] 
                であればnprob> PROB:
                    PROB = nprob 
                    状態= Y0 
            max_p [T] [Y] = PROB 
            範囲(T)におけるmの場合:
                newpathを[Y] [M] =パス[状態] [M] 
            newpathを[Y] [T] Y = 
        = newpathをパスを
    max_prob = -100000000 
    path_state = 0 
    の範囲内のyの(LEN(状態)):
        もしmax_p [LEN(OBS)-1] [Y]> max_prob:
            max_prob = max_p [LEN(OBS)-1] [Y] 
            path_state = Y 
    #print(max_prob)
    復路[path_state] 
state_s = []  
obser = []#のFASTAファイル
ALP = []#アルファベット

 
#get HMMファイルの
行のf2.readlines =()
ワードリスト=行[0] .split()#別のリストの各行の数
ワードリストで#for:数字の各列を通る#
    #Print(A)
statenum = INT(単語リスト[0])
hidden_​​state = [] 
の範囲内のK(statenum)用:
    state_s.append(K)
    hidden_​​state.append(CHR(ORD( 'A')+ K))
letternum =ワードリスト[1] 
#Print((単語リスト[2]))
の範囲でI(LEN(単語リスト[2]))のための:
    alp.append((単語リスト[2] [I])低級())
    #Print(ALP [i])と
デジタルワードリスト=ライン[1] .split( )#リスト内の各個別の行の
start_probability = [] 
ワードリストにするため#各行を横断します
    #Print()
    start_probability.append(フロート(A))
#Print(statenum)
#print(letternum)

transititon_probability = np.zeros((INT(statenum)、INT(statenum)))
emission_probability = np.zeros((INT(statenum)、INT(letternum)))
#print(emission_probability [2] [2])
NNにするため範囲(INT(statenum)):
    ワードリスト=行[NN + 2] .split()#将每一行的数字分开放在列表中
    #print(LEN(ワードリスト))
    の範囲内のkに対する(INT(statenum))。
        transititon_probability [NN] [K] = math.log(フロート(単語リスト[K]))
        #print(transititon_probability [NN] [K])
    の範囲内のkに対する(INT(letternum)):
        emission_probability [NN] [K] = math.log(フロート(単語リスト[K + statenum]))
        #print( "EMI")
        #print(emission_probability [NN] [K])
    #print( "リード%のD" %(NN))




Fの行のための: #getのFASTAファイル
    :行のための
        IF(== ">"):
            ブレイク
        範囲のkに対する(LEN(ALP)):
            IF(a.lower()== ALP [K]):
                obser.append(K)
#transititon_probability = np.array([math.log(0.999)、math.log(0.001)]、[math.log(0.01)、math.log(150)]])#遷移表
#emission_probability = np.array([ [math.log(0.35)、math.log(0.15)、math.log(0.15)、math.log(0.35)]、[math.log(0.15)、math.log(0.35)、math.log(0.35 )、math.log(0.15)]])#放出テーブル
結果=計算(obser、state_s、start_probability、transititon_probability、emission_probability)
COUN = 0 
STA = -1 
POS = 1 
#print(結果) 
の範囲内のK(LEN(結果))のために:
    (STAなら!= -1 !とSTA = INT(結果[K])):
        印刷( "%7D%7D状態%S" %(POS、K、hidden_​​state [STA]))
        f1.write( "%7D%7D状態%S \ n" %(POS、K、hidden_​​state [STA]))
        IF(STA == 1):
            COUN + = 1 
        = K + 1、POS 
    STA = INT(結果[K]) 印刷( "%7D%7D状態%S" %(POS、K + 1、hidden_​​state [STA]) )
f1.write( "%7D%7D状態%S \ n" %(POS、K + 1、hidden_​​state [STA]))

  

おすすめ

転載: www.cnblogs.com/hyffff/p/12643543.html
おすすめ