Python - Mesin Status Pemrosesan Teks

Mesin negara adalah tentang merancang program untuk mengontrol aliran dalam aplikasi. itu adalah grafik terarah, yang terdiri dari satu set node dan satu set fungsi transisi. Memproses file teks sangat sering terdiri dari pembacaan berurutan dari setiap potongan file teks dan melakukan sesuatu sebagai respons untuk setiap pembacaan potongan. Arti dari potongan tergantung pada jenis potongan yang ada sebelumnya dan potongan apa yang muncul setelahnya. Mesin itu mendesain program untuk mengontrol aliran dalam aplikasi. itu adalah grafik terarah, yang terdiri dari satu set node dan satu set fungsi transisi. Memproses file teks sangat sering terdiri dari pembacaan berurutan dari setiap potongan file teks dan melakukan sesuatu sebagai respons untuk setiap pembacaan potongan. Arti dari potongan tergantung pada jenis potongan yang ada sebelumnya dan potongan apa yang muncul setelahnya.

Pertimbangkan skenario di mana teks harus menjadi string pengulangan urutan AGC yang berkelanjutan (digunakan dalam analisis protein). Jika urutan spesifik ini dipertahankan dalam string input, status mesin tetap TRUE tetapi segera setelah urutan menyimpang, status mesin menjadi FALSE dan tetap FALSE setelah lingkungan. Ini memastikan pemrosesan lebih lanjut dihentikan meskipun mungkin ada lebih banyak potongan urutan yang benar tersedia nanti.

Program di bawah ini mendefinisikan mesin status yang berfungsi untuk menghidupkan mesin, mengambil input untuk memproses teks dan melangkah melalui pemrosesan.

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

Ketika kami menjalankan program di atas, kami mendapatkan output berikut -

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

Dalam hasil x, pola AGC gagal untuk input kedua setelah 'A' pertama. Status hasil tetap False selamanya setelah ini. Pada hasil Y, pola AGC berlanjut hingga input ke-4. Oleh karena itu keadaan hasilnya tetap Benar sampai saat itu. Tapi dari input ke-5 hasilnya berubah menjadi False as G diharapkan, tapi C ditemukan.