Coding/Python Matlab

한글 자모 분리방법 - 3327 한글 데이터 만들기를 위해서

smores 2023. 11. 22. 03:39

옛날 8비트 애플2 및 16비트 PC 초기 시절엔 N바이트 조합형 한글을 사용하곤 했었다. 도트 프린터들도 거기 맞춰서 한글을 프린트를 해 주는 모듈이 장착된 모델들이 판매되었었고. 

 

요즘 레트로 컴퓨터 취미 생활의 한 부분으로 애플2 시절 3327 한글이 사용된 소프트웨어 중 파손된 데이터의 복구나 도트 프린터 에뮬레이션 등을 해보고 있다. 그러던 중 윈도우즈에서 UTF-8 포맷으로 준비한 한글 데이터를 3327 의 입력기 방식에 맞는 자모(실제로는 매칭되는 알파벳 및 기호문자, 키보드에 하나씩 매칭됨)로 변환하려는데 완성형 한글 한글자마다 자모를 분리하고, Apple2 키보드의 키로 매칭하는 작업이 필요했다. 그때 자모 분리 작업을 어떻게 할지 고민하다 우연히 검색에서 찾은 좋은 자료가 있어서 기록으로 남겨둔다.

 

https://m.blog.naver.com/myincizor/221631254811

 

한국어 자모 분리 / 결합 — jamo, hangul-utils

이번 글에서는 한국어 텍스트를 자음+모음으로 나누는 방법을 알아보겠습니다. 안녕! ▼ ㅇㅏㄴㄴㅕㅇ! 한...

blog.naver.com

한글 자모 분리 결합.pdf
0.55MB

 

hangul-utils-master.zip
0.03MB

 

 

파이썬은 정말 강력하고도 쉽다. 궁해서 찾으면 거의 모든 것이 이미 라이브러리로 준비되어 있다. 이번에도 jamo 라는 라이브러리 덕에 일을 간단히 처리했다. 다음은 작업한 코드의 한 파트. UTF-8 한글의 텍스트를 자모로 나누는 것은 딱 한줄(라이브러리 import 포함 두줄)이면 된다!!!

 

from jamo import h2j, j2hcj

sj = j2hcj(h2j(s))

 

자모로 나눈 것을 Apple2 3327 한글 텍스트로 바꾸는 것은 간단한 룩업 테이블로 끝.

 


# 3327: - ㄲ, = ㄸ, * ㅃ, < ㅆ, > ㅉ, + ㅖ, ; ㅒ

tbl = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ'
tbl_key = [
    'R', #ㄱ
    '-', #ㄲ
    'S', #ㄴ
    'E', #ㄷ
    '=', #ㄸ
    'F', #ㄹ
    'A', #ㅁ
    'Q', #ㅂ
    '*', #ㅃ
    'T', #ㅅ
    '<', #ㅆ
    'D', #ㅇ
    'W', #ㅈ
    '>', #ㅉ
    'C', #ㅊ
    'Z', #ㅋ
    'X', #ㅌ
    'V', #ㅍ
    'G', #ㅎ
    'K', #ㅏ
    'O', #ㅐ
    'I', #ㅑ
    ';', #ㅒ
    'J', #ㅓ
    'P', #ㅔ
    'U', #ㅕ
    '+', #ㅖ
    'H', #ㅗ
    'HK', #ㅘ
    'HO', #ㅙ
    'HL', #ㅚ
    'Y', #ㅛ
    'N', #ㅜ
    'NJ', #ㅝ
    'NP', #ㅞ
    'NL', #ㅟ
    'B', #ㅠ
    'M', #ㅡ
    'ML', #ㅢ
    'L', #ㅣ
    'R', #ㄱ
    '-', #ㄲ
    'RT', #ㄳ
    'S', #ㄴ
    'SW', #ㄵ
    'SG', #ㄶ
    'E', #ㄷ
    'F', #ㄹ
    'FR', #ㄺ
    'FA', #ㄻ
    'FQ', #ㄼ
    'FT', #ㄽ
    'FX', #ㄾ
    'FV', #ㄿ
    'FG', #ㅀ
    'A', #ㅁ
    'Q', #ㅂ
    'QT', #ㅄ
    'T', #ㅅ
    '<', #ㅆ
    'D', #ㅇ
    'W', #ㅈ
    'C', #ㅊ
    'Z', #ㅋ
    'X', #ㅌ
    'V', #ㅍ
    'G'  #ㅎ
]

 

cvt_3327.py
0.00MB

 

다음은 변환 전 파일과 변환 후 파일의 사례 (변환된 것은 데이터가 애플베이식 코드 안에 들어가 있다)

U11.txt
0.00MB
B11.bas.txt
0.00MB