#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 파일명: 한글_제이슨.py # 유니코드 한글을 자소 분리후 JSON 포맷으로 만들기 # JSON 포맷 명세: RFC8259 # JSON 문법 검사: jsonlint.com # ^「Public Domain」_^))// 입니다^^^ """ ### 한글 유니코드 자소 분리 방법 ### 출처: http://dream.ahboom.net/entry/%ED%95%9C%EA%B8%80-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C-%EC%9E%90%EC%86%8C-%EB%B6%84%EB%A6%AC-%EB%B0%A9%EB%B2%95 초성(19): ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"] 중성(21): ["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"] 종성(28): ["", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"] 19 * 21 * 28 = 11172 (총 글자 갯수) "가(0xAC00)" ===> 첫 글자 "힣(0xD7A3)" ===> 마지막 글자 따라서, 한글의 유니코드 식별번호는 아래의 조합순으로 결정됩니다 ===> ((초성 * 21) + 중성) * 19 + 종성 + 0xAC00 """ import sys import re import json 초성 = ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"] 중성 = ["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"] 종성 = ["", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"] def 자소분리(글자): # 초성 ===> X # 중성 ===> Y # 종성 ===> Z 재정렬 = ord(글자) - 0xac00 Z = 재정렬 % 28 Y = (재정렬 // 28) % 21 X = ((재정렬 // 28) // 21) % 19 return 초성[X], 중성[Y], 종성[Z] 입력 = sys.argv[1] 정렬문자열 = [x for x in 입력 if re.match("[가-힣]", x)] 자소분리결과 = [자소분리(x) for x in 정렬문자열] KEY = 정렬문자열 VALUE = [dict(초 = x[0], 중 = x[1], 종 = x[2]) for x in 자소분리결과] dd = dict(zip(KEY, VALUE)) dj = json.dumps(dd, indent=3, ensure_ascii=False) print(dj) # 편집: GNU Emacs 26.3 (Ubuntu 18.04) # 최초 작성일: 2020년 6월 1일 # 마지막 갱신: 2020년 6월 5일