한글 처리하기

 

한글을 입력받아 처리하는 유한 상태 기계(FSM)

한글을 입력 받는 유한 상태 기계(Finite State Machine, FSM)를 구현하려면, 입력 가능한 모든 한글 문자의 조합을 고려하여 상태 전이를 정의해야 합니다. 이를 위해 다음과 같이 간단한 한글 FSM을 구현할 수 있습니다.
class HangulFSM: def __init__(self): self.current_state = 0 def get_next_state(self, char): hangul_range = ord(char) - ord('가') if hangul_range < 0 or hangul_range > 11172: return -1 hangul_jaso = hangul_range % 28 # 받침 hangul_moum = (hangul_range - hangul_jaso) // 28 # 모음 if hangul_jaso == 0: if self.current_state == 0: return 1 else: return 0 else: if self.current_state == 1: if hangul_moum == 0 or hangul_moum == 8: return 0 else: return 2 elif self.current_state == 2: if hangul_moum == 0: return 3 else: return 0 elif self.current_state == 3: return 0 return -1 def process_input(self, input_str): for char in input_str: next_state = self.get_next_state(char) if next_state == -1: return False self.current_state = next_state return self.current_state in [1, 3]
 
위 코드에서 HangulFSM 클래스는 현재 상태를 유지하고, 입력된 문자를 받아 상태 전이를 수행합니다. 한글 유니코드의 범위를 고려하여, 받침과 모음을 분리하고 상태 전이를 수행합니다. 예를 들어, 상태 0에서 한글 초성이 입력되면 상태 1로 전이하고, 상태 1에서 받침이 입력되면 상태 2로 전이합니다.
process_input 메소드는 문자열을 입력받아, 각 문자를 처리하고, 마지막 상태가 종료 상태(1 또는 3)인지를 반환합니다. 이를 통해 입력된 문자열이 한글인지를 판별할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
 
hangul_fsm = HangulFSM() input_str = input("한글을 입력하세요: ") if hangul_fsm.process_input(input_str): print("올바른 한글입니다.") else: print("한글이 아닙니다.")
 
이 코드를 실행하면 한글 문자열을 입력받고, 입력된 문자열이 올바른 한글인지를 판별하여 출력합니다.

 
음력에서 양력으로, 양력에서 음력으로 변환하는 파이썬 코드는 다음과 같습니다.
import datetime import lunarcalendar # 양력에서 음력으로 변환 def solar_to_lunar(solar_date): lunar_date = lunarcalendar.fromSolarDate(solar_date.year, solar_date.month, solar_date.day) return lunar_date # 음력에서 양력으로 변환 def lunar_to_solar(lunar_date): solar_date = lunarcalendar.toSolarDate(lunar_date.year, lunar_date.month, lunar_date.day, lunar_date.leap) return datetime.date(solar_date.year, solar_date.month, solar_date.day)
위 코드에서 solar_to_lunar 함수는 양력 날짜를 입력받아 음력 날짜로 변환하여 반환합니다. 반면, lunar_to_solar 함수는 음력 날짜를 입력받아 양력 날짜로 변환하여 반환합니다.
이를 사용하여 양력 2022년 10월 1일을 음력으로 변환하면 다음과 같습니다.
solar_date = datetime.date(2022, 10, 1) lunar_date = solar_to_lunar(solar_date) print(lunar_date) # 2022년 8월 28일
반대로, 음력 2022년 3월 1일을 양력으로 변환하면 다음과 같습니다.
lunar_date = lunarcalendar.Lunar(2022, 3, 1, False) solar_date = lunar_to_solar(lunar_date) print(solar_date) # 2022-03-29