급하게 쓸 일이 생겨 급조 했습니다.
한글 초중종성 분리는 구글에서 검색한 것 그대로(http://blog.cozyu.org/m/post/289)
코드는
CREATE OR REPLACE FUNCTION public.ecvpko(str text)
RETURNS text
LANGUAGE plpython3u
AS $function$
# -*- coding:utf-8 -*-
import re,unicodedata
def divide_char(char):
num = ord(char) - 0xac00
if num<0:
return None
cho = num / (21*28)
jung = (num % (21*28))/28
jong = num % 28
return int(cho), int(jung), int(jong)
dubeul_table = [["r", "R", "s", "e", "E", "f", "a", "q", "Q", "t", "T", "d", "w", "W", "c", "z", "x", "v","g"],
["k", "o", "i", "O", "j", "p", "u", "P", "h", "hk", "ho", "hl", "y", "n", "nj", "np", "nl", "b", "m", "ml","l"],
["", "r", "R", "rt", "s", "sw", "sg", "e", "f", "fr", "fa", "fq", "ft", "fx", "fv", "fg", "a", "q", "qt", "t","T", "d", "w", "c", "z", "x", "v", "g"]]
jamo_map = {u"ㄱ":"r", u"ㄲ":"R", u"ㄴ":"s", u"ㄷ":"e", u"ㄸ":"E", u"ㄹ":"f", u"ㅁ":"a", u"ㅂ":"q",
u"ㅃ":"Q", u"ㅅ":"t", u"ㅆ":"T", u"ㅇ":"d", u"ㅈ":"w", u"ㅉ":"W", u"ㅊ":"c", u"ㅋ":"z",
u"ㅌ":"x", u"ㅍ":"v",u"ㅎ":"g",
u"ㅏ":"k", u"ㅐ":"o", u"ㅑ":"i", u"ㅒ":"O", u"ㅓ":"j", u"ㅔ":"p", u"ㅕ":"u", u"ㅖ":"P",
u"ㅗ":"h", u"ㅘ":"hk", u"ㅙ":"ho", u"ㅚ":"hl", u"ㅛ":"y", u"ㅜ":"n", u"ㅝ":"nj", u"ㅞ":"np",
u"ㅟ":"nl", u"ㅠ":"b", u"ㅡ":"m", u"ㅢ":"ml",u"ㅣ":"l",
u"ㄳ":"rt", u"ㄵ":"sw", u"ㄶ":"sg", u"ㄺ":"fr", u"ㄻ":"fa", u"ㄼ":"fq", u"ㄽ":"ft",
u"ㄾ":"fx", u"ㄿ":"fu", u"ㅀ":"fg", u"ㅄ":"qt"};
ret_str = "";
for c in str:
unicodename = unicodedata.name(c);
if(re.match('^HANGUL SYLLABLE', unicodename)):
ret= divide_char(c)
ret_str += "%s%s%s" % (dubeul_table[0][ret[0]], dubeul_table[1][ret[1]],dubeul_table[2][ret[2]])
elif(re.match('^HANGUL LETTER', unicodename)):
ret_str += jamo_map[c]
else:
ret_str += c
return ret_str
$function$;
사용법은
=# select ecvpko('안녕하세요');
ecvpko
----------------
dkssudgktpdy
(1 row)
|