Python-텍스트 처리 상태 머신
상태 머신은 애플리케이션의 흐름을 제어하는 프로그램을 설계하는 것입니다. 노드 세트와 전환 함수 세트로 구성된 유 방향 그래프입니다. 텍스트 파일 처리는 텍스트 파일의 각 청크를 순차적으로 읽고 각 청크 읽기에 대한 응답으로 수행하는 작업으로 구성됩니다. 청크의 의미는 이전에 존재했던 청크 유형과 그 뒤에 오는 청크에 따라 다릅니다. 기계는 애플리케이션의 흐름을 제어하는 프로그램을 설계하는 것입니다. 노드 세트와 전환 함수 세트로 구성된 유 방향 그래프입니다. 텍스트 파일 처리는 텍스트 파일의 각 청크를 순차적으로 읽고 각 청크 읽기에 대한 응답으로 수행하는 작업으로 구성됩니다. 청크의 의미는 이전에 존재했던 청크 유형과 그 뒤에 오는 청크에 따라 다릅니다.
텍스트 넣기가 AGC (단백질 분석에 사용됨) 시퀀스의 연속적인 반복 문자열이어야하는 시나리오를 고려하십시오. 이 특정 시퀀스가 입력 문자열에 유지되면 시스템의 상태는 TRUE로 유지되지만 시퀀스가 벗어나 자마자 시스템의 상태는 FALSE가되고 ward 이후에도 FALSE로 유지됩니다. 이렇게하면 나중에 사용할 수있는 올바른 시퀀스 청크가 더 많더라도 추가 처리가 중지됩니다.
아래 프로그램은 기계를 시작하고, 텍스트를 처리하기위한 입력을 받고, 처리를 단계적으로 진행하는 기능이있는 상태 기계를 정의합니다.
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의 결과에서 첫 번째 'A'이후 두 번째 입력에 대해 AGC 패턴이 실패합니다. 결과의 상태는이 후 영원히 False로 유지됩니다. Y의 결과에서 AGC의 패턴은 4 번째 입력까지 계속됩니다. 따라서 결과의 상태는 그 시점까지 True로 유지됩니다. 그러나 다섯 번째 입력에서 G가 예상대로 결과가 False로 변경되지만 C가 발견됩니다.