[Python] 파이썬을 이용한 자모(초성/중성/종성) 분리 및 결합하기

    자모의 정의

    자모(子母, 字母)또는 낱자는 문자 체계의 한 요소로서 한글에서는 모음인 ㅏ나 ㅗ, ㄱ,ㅎ 따위를 일컫는다. 알파벳
     체계에서도 위와 같은 특징이 존재하고 있으며 구어 형태로 쓰이는 모든 언어에서 자모는 음성학과 연관된다.

    위키피디아 - 자모

     

    자모 분리

    자모를 분리하기 위해서는 jamo 라는 패키지를 설치하여 진행한다.

     

    github.com/JDongian/python-jamo

     

    JDongian/python-jamo

    Hangul syllable decomposition and synthesis using jamo. - JDongian/python-jamo

    github.com

    위 깃허브는 자모 패키지를 만든 분의 깃헙이고, 패키지가 어떻게 처리가 되는 것인지 대충 알고리즘을 파악하면 좋을 것 같다.

    pip install jamo

     

     

    from jamo import h2j, j2hcj
    text = "동해물과 백두산이 마르고 닳도록"
    jamo_str = j2hcj(h2j(text))
    print(jamo_str)
    ㄷㅗㅇㅎㅐㅁㅜㄹㄱㅘ ㅂㅐㄱㄷㅜㅅㅏㄴㅇㅣ ㅁㅏㄹㅡㄱㅗ ㄷㅏㅀㄷㅗㄹㅗㄱ

    위 내용을 보면 h2j 이후, j2hcj라는 2번의 작업을 진행하게 되는데 조합형 한글로 변환한 후 완성형 한글로 변환하는 작업이다. 이를 확인하기 위해서 국이라는 단어를 ord() 함수를 통해 아스키 코드값을 가져와보도록 한다. 

     

    조합형이 되어버린 국 글자

     

    before에 '국'이라는 문자를 넣고, 이를 h2j 메소드를 태워 after에 넣는다. 둘의 값을 print하면 동일해보이지만, before 변수를 ord로 호출하면 44397이라는 유니코드 포인트값이 나오지만, h2j를 감싼 after 변수는 length가 3글자라고 에러가 발생되었다.  

     

    이처럼 h2j는 조합형으로 한글을 변환하는 것을 알 수 있으며, j2hcj는 조합형 한글을 인자값으로 입력 받고, 변환이 되는 것을 알 수 있다. 

     

    자모 결합하기

    자모를 분리해봤으니 이제 자모를 합쳐보도록 한다. 자모를 합치는 것은 hangul_utils라는 패키지를 이용하면 된다.

     

    github.com/kaniblu/hangul-utils

     

    kaniblu/hangul-utils

    An integrated library for Korean language preprocessing. - kaniblu/hangul-utils

    github.com

    그러나 위 패키지는 mecab(형태소 분석기, 은전한닢)을 설치해야 가능하다.

     

    다행히 형태소 분석기를 설치하지 않고, 합치는 것을 사용하는 방법이 있는데 해당 프로젝트에서 hangul_utils/unicode.py를 별도로 받아서 사용을 하는 것이다.

     

    from unicode import join_jamos
    print(join_jamos(jamo_str))
    
    # 동해물과 백두산이 마르고 닳도록

     

    최종 소스

    from jamo import h2j, j2hcj
    from unicode import join_jamos
    text = "동해물과 백두산이 마르고 닳도록"
    jamo_str = j2hcj(h2j(text))
    print(jamo_str)
    
    merge_jamo = join_jamos(jamo_str)
    print(merge_jamo)

     

    댓글

    Designed by JB FACTORY