본문 바로가기
IT 톺아보기/이런저런 공부

한글 오토마타 만들기 - 1

by 파초우 2023. 1. 18.
반응형

오토마타란?

오토마타는 이산 시간 동안 주어진 입력에 의존해 작동하는 수학적인 기계이다. 기계는 일정 주기마다 입력을 하나씩 받는데, 이를 기호 또는 문자라고 한다. 기계가 입력받는 문자는 정해진 집합의 한 원소여야 하며, 이를 알파벳이라 한다. 기계가 입력받는 일련의 기호와 문자를 문자열이라 한다. 기계는 유한한 상태의 집합을 갖고 있으며, 입력에 따라 현재 상태에서 정해진 다음 상태로 전이한다. 현재 상태와 입력, 다음 상태는 수학적으로 함수 또는 관계로 주어진다. 이를 전이 함수 또는 전이 관계라 한다. 기계는 입력의 끝을 만나거나 특정 상태에 있을 때 정지할 수 있다. 기계는 정지했을 때 문자열을 수용하거나 거부한다. (출처: 위키백과 - 오토마타 이론)

위 설명대로 오토마타 이론은 활용하여 입력 받은 것을 적절히 조합하여 한글을 만들어 나가는 방식이다.

예를 들어, "ㅎㅏㄴㄱㅡㄹ"을 입력 받았을 때 해당 문자열의 초성 / 중성 / 종성을 잘 구분하여 "한글"을 만들어 내는 프로그램을 만들어 내면 된다.

여기서 내가 만들 오토마타의 경우에는 영어 키보드 입력을 받아 이를 한글로 표현해주는 방식을 이용할 것이다. 조금은 복잡하게 코드를 작성한 느낌이 있어 많은 피드백을 주면 좋겠다.

키보드 입력 받기

해당 작업 자체가 cmd에 입력을 하면 바로 띄워주는 방식으로 구성할 것이라 getch() 함수가 필요하다. 해당 함수는 내가 입력한 키보드를 b'' 형식으로 전달한다.

그리로 cmd창을 깔끔하게 하기 위해 system("cls")도 추가해준다.

# console 창 깨끗하게 만드는 함수
def CmdClear():
    if psys() == "Windows":
        system("cls")
    else:
        system("clear")

if __name__ == "__main__":
    from platform import system as psys
    from os import system

    print("단어를 입력해주세요: ")
    words = ""
    sentence = ""
    while True:
        char = getche()
        CmdClear()
        # Ctrl + C를 누르면 꺼지게 만듬
        if b"\x03" == char:
            break
        # 백 스페이스바를 누르면 하나씩 지워지게 만듬
        elif b"\x08" == char and len(words) > 0:
            words = words[:-1]
        # Enter 키를 누르면 리셋되도록 만듬
        elif b"\r" == char:
            words = ""
            sentence =""
        elif char in b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()_+-=[]{};':\"\\|,./<>? ":
            words += chr(ord(char))
        sentence = MakeHangeul(words)
        print(f"Enter 입력시 초기화 됩니다. Ctrl + C 클릭 시 종료\n{sentence}")

위 python 코드에서 보는 것과 같이 Ctrl + C와 Enter, back space에 대한 명령을 주고 나머지 영어 입력이나 숫자, 특수 기호는 입력을 받는 형식으로 코드를 구성했다.

words += chr(ord(char))

코드 경우에는 b''형식으로 입력되어져 이를 처리하는 방식이 이게 적절하다고 판단되어 사용을 하였다.

이렇게 저장된 Naive한 문자열을 MakeHangeul이라는 함수를 통해 변환을 해주기로 한다.

 

 

https://ph-biginner.tistory.com/136

 

반응형