インポート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]))