文字處理狀態機


狀態機是關於設計程式來控制應用程式中的流程。 它是一個有向圖,由一組節點和一組過渡函式組成。 處理文字檔案通常包括順序讀取文字檔案的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的型別以及它之後的塊。 該機器是關於設計程式來控制應用程式中的流程。 它是一個有向圖,由一組節點和一組過渡函式組成。 處理文字檔案通常包括順序讀取文字檔案的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的型別以及它之後的塊。

考慮有一種情況,其中文字放置必須是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