文本處理狀態機
狀態機是關於設計程序來控制應用程序中的流程。 它是一個有向圖,由一組節點和一組過渡函數組成。 處理文本文件通常包括順序讀取文本文件的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的類型以及它之後的塊。 該機器是關於設計程序來控制應用程序中的流程。 它是一個有向圖,由一組節點和一組過渡函數組成。 處理文本文件通常包括順序讀取文本文件的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的類型以及它之後的塊。
考慮有一種情況,其中文本放置必須是AGC序列的重複連續串(用於蛋白質分析)。 如果在輸入字符串中保持此特定序列,則機器的狀態保持爲TRUE
,但是一旦序列偏離,機器的狀態將變爲FALSE
並且在之後保持爲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的結果中,AGC的模式在第一個’A’之後的第二個輸入失敗。 在此之後,結果的狀態將永遠保持爲False
。 在Y的結果中,AGC的模式持續到第4
個輸入。 因此,結果的狀態在此之前保持爲真。 但是從第5
個輸入開始,結果變爲False
,因爲G
是預期的結果,但是查找結爲C
。