database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Devel 9594 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9594
한글 두벌식 자판 영타 변환
작성자
김상기(ioseph)
작성일
2015-09-22 13:16
조회수
6,196

 급하게 쓸 일이 생겨 급조 했습니다. 

한글 초중종성 분리는 구글에서 검색한 것 그대로(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)
이 글에 대한 댓글이 총 1건 있습니다.

이런 내용도 있었나요? 그럼 한글 세벌식을 쿼티 영타로 변환, 한글 세벌식을 드보락 영타로 변환 이런 것도 가능한 거죠?

전상도(sebul)님이 2017-03-01 05:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10432windows 환경에서 pg_hint_plan 빌드하기
김상기
2023-05-16
662
10420plpython3u 확장 모듈을 이용한 사용자 정의 함수 본문 코드 숨기기
김상기
2023-04-28
708
9594한글 두벌식 자판 영타 변환 [1]
김상기
2015-09-22
6196
9488testsearch-ja 모듈을 이용한 우리말 full text search [1]
김상기
2014-11-25
8622
8596full text search를 호출하는 트리거
김상기
2010-01-06
11450
8595full text search 또 한 번 바꾸어 보았습니다.
김상기
2010-01-05
9988
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다