Python-text-processing-state-machine

提供:Dev Guides
移動先:案内検索

Python-テキスト処理状態マシン

ステートマシンとは、アプリケーションのフローを制御するプログラムを設計することです。 これは、ノードのセットと遷移関数のセットで構成される有向グラフです。 テキストファイルの処理は、多くの場合、テキストファイルの各チャンクの順次読み取りと、読み取られた各チャンクに応じた処理で構成されます。 チャンクの意味は、その前に存在していたチャンクのタイプとその後に続くチャンクによって異なります。 マシンは、アプリケーションのフローを制御するプログラムを設計することです。 これは、ノードのセットと遷移関数のセットで構成される有向グラフです。 テキストファイルの処理は、多くの場合、テキストファイルの各チャンクの順次読み取りと、読み取られた各チャンクに応じた処理で構成されます。 チャンクの意味は、その前に存在していたチャンクのタイプとその後に続くチャンクによって異なります。

テキスト入力は、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」の後の2番目の入力で失敗します。 この後、結果の状態はFalseのままです。 Yの結果では、AGCのパターンは4番目の入力まで続きます。 したがって、結果の状態はその時点までTrueのままです。 しかし、5番目の入力から、Gが期待されるのに結果がFalseに変わりますが、Cが見つかります。