Учебники

Python — конечный автомат обработки текста

Конечный автомат — это проектирование программы для управления потоком в приложении. это ориентированный граф, состоящий из набора узлов и набора функций перехода. Обработка текстового файла очень часто состоит из последовательного чтения каждого фрагмента текстового файла и выполнения чего-либо в ответ на каждое чтение фрагмента. Значение чанка зависит от того, какие типы чанков присутствовали до него и какие чанки идут после него. Машина предназначена для разработки программы для управления потоком в приложении. это ориентированный граф, состоящий из набора узлов и набора функций перехода. Обработка текстового файла очень часто состоит из последовательного чтения каждого фрагмента текстового файла и выполнения чего-либо в ответ на каждое чтение фрагмента. Значение чанка зависит от того, какие типы чанков присутствовали до него и какие чанки идут после него.

Рассмотрим сценарий, в котором текст должен представлять собой непрерывную строку повторения последовательности AGC (используется при анализе белка). Если эта конкретная последовательность сохраняется во входной строке, состояние машины остается ИСТИНА, но как только последовательность отклоняется, состояние машины становится ЛОЖНЫМ и остается ЛОЖНЫМ после защиты. Это гарантирует, что дальнейшая обработка будет остановлена, хотя позже может быть доступно больше фрагментов правильных последовательностей.

Приведенная ниже программа определяет конечный автомат, который имеет функции для запуска машины, ввода данных для обработки текста и выполнения обработки.


class StateMachine:

# Initialize 
    def start(self):
        self.state = self.startState

# Step through the input
    def step(self, inp):
        (s, o) = self.getNextValues(self.state, inp)
        self.state = s
        return o

# Loop through the input		
    def feeder(self, inputs):
        self.start()
        return [self.step(inp) for inp in inputs]

# Determine the TRUE or FALSE state
class TextSeq(StateMachine):
    startState = 0
    def getNextValues(self, state, inp):
        if state == 0 and inp == 'A':
            return (1, True)
        elif state == 1 and inp == 'G':
            return (2, True)
        elif state == 2 and inp == 'C':
            return (0, True)
        else:
            return (3, False)


InSeq = TextSeq()

x = InSeq.feeder(['A','A','A'])
print x

y = InSeq.feeder(['A', 'G', 'C', 'A', 'C', 'A', 'G'])
print y

Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод:

[True, False, False]
[True, True, True, True, False, False, False]

В результате x шаблон AGC завершается неудачно для второго входа после первого «A». Состояние результата остается Ложным навсегда после этого. В результате Y паттерн AGC продолжается до 4-го входа. Следовательно, состояние результата остается истинным до этого момента. Но с 5-го ввода результат меняется на False, поскольку ожидается G, но C найден.