Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def read_state_table(lines):
- states_transition = {}
- states_order = []
- for i in lines[0]:
- if i != ' ' and i != '\t':
- states_order.append(i)
- for row in lines[1:]:
- cells = [cell for cell in row.split() if cell != '']
- states_transition[cells[0]] = {}
- for idx, cell in enumerate(cells[1:]):
- states_transition[cells[0]][states_order[idx]] = float(cell)
- return states_transition
- def read_letter_table(lines):
- letter_emission = {}
- letter_order = []
- for i in lines[0]:
- if i != ' ' and i != '\t':
- letter_order.append(i)
- letter_emission[i] = {}
- for row in lines[1:]:
- cells = [cell for cell in row.split() if cell != '']
- for idx, cell in enumerate(cells[1:]):
- letter_emission[letter_order[idx]][cells[0]] = float(cell)
- return letter_emission
- s = []
- def states_sequence_probability_first(first_letter, transitions_table, emission_table):
- s.append({})
- s[0][0] = 1
- for k in transitions_table:
- s[0][k] = emission_table[first_letter][k] * 1 / len(transitions_table)
- def states_sequence_probability(string, transitions_table, emission_table):
- states_sequence_probability_first(string[0], transitions_table, emission_table)
- for i in range(1, len(string)):
- s.append({})
- for k in transitions_table:
- sum = 0
- for l in transitions_table:
- sum += s[i-1][l]*transitions_table[l][k]
- s[i][k] = emission_table[string[i]][k]*sum
- sum = 0
- for k in transitions_table:
- sum += s[len(string) - 1][k]
- return sum
- def read_file(filename):
- file = ''
- with open(filename) as f:
- file = f.read()
- lines = file.split('\n')
- string = lines[0]
- letters = [x for x in lines[2].split('\t') if x != '']
- transitions_table = read_state_table(lines[6:6 + len(letters)])
- emission_table = read_letter_table(lines[6 + len(letters) + 1:])
- return string, transitions_table, emission_table
- string, transitions_table, emission_table = read_file('rosalind_ba10d.txt')
- print(states_sequence_probability(string, transitions_table, emission_table))
Advertisement
Add Comment
Please, Sign In to add comment