Juwan Park :: 한글 완성자 분석하기

한글 완성자 분석하기

★프로그래밍/Ruby :: 2016. 8. 13. 23:16

한글 완성자 분석 프로그램 예제입니다.

이 프로그램은 한글 완성자가 어떤 자모로 조합되어 있는지 (예를 들어 '한글'이라는 문자열을 받으면 '한'을 ㅎ+ㅏ+ㄴ으로 분석하고 '글'을 ㄱ+ㅡ+ㄹ로) 분석해서 화면에 표시하는 프로그램입니다.

이 프로그램은 UTF-8 인코딩을 이용합니다.

# 초성, 중성, 종성 배열을 만들어 둠
choseong =  ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ",
             "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ",
             "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]
jungseong = ["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ",
             "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ",
             "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"]
jongseong = ["**", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ",
             "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ",
             "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ",
             "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]

# 입력 받기
puts "1글자 이상의 한글 완성자(가-힣)를 입력하세요."
puts "한글 완성자 이외는 무시됩니다."
print "입력: "
hanch = gets.encode("utf-8")
puts

# 처리 시작
# 코드포인트 배열
ccp = hanch.codepoints
for i in 0..ccp.length-1
  # 한 글자씩 훑기
  # '가'의 UTF-8 포인터가 U+AC00(44032)임. '힣'은 U+D7A3(55203).
  if ccp[i] >= 44032 && ccp[i] <= 55203
    # 한글 완성자(가-힣)가 맞다면
    cp_cho = (ccp[i] - 44032) / 588
    cp_jung = ((ccp[i] - 44032) % 588) / 28
    cp_jong = (ccp[i] - 44032) % 28
    puts sprintf("%s = 초성 %s + 중성 %s + 종성 %s",
      hanch[i], choseong[cp_cho], jungseong[cp_jung], jongseong[cp_jong])
  end
end

아래는 이 코드를 실행한 스크린샷입니다.

게임 프로그래밍에는 예를 들면 자음퀴즈 등에 유용할 듯 싶은 코드입니다.
유용하게 활용하시기 바랍니다.

Today    Yday    Tot
Juwan Park
Juwan Park's blog is powered by Daum and .
Contemporary Blue for .
Designed by Juwan Park. Creative Commons License
▲ TOP