한글의 자모 분리

Posted 2015. 12. 3. 15:05

입력된 문자가 음절인지 확인하고, check_ch_type()

음절인 경우 conv_jaso를 통해 자모 분해 & compatibility_jamo로 변환


import unicodedata


def check_ch_type(ch):

    valid_type = ['Lo']

    if unicodedata.category(ch) in valid_type:

        unicode_names = unicodedata.name(ch).split()

        if 'HANGUL' in unicode_names and 'SYLLABLE' in unicode_names:

            return True

        else:

            return False

    else:

        return False


def conv_jaso(ch=u'각'):


    def conv_compatibility_jamo(ch):

        unicode_names = unicodedata.name(ch)

        # print ch, unicode_names

        if unicode_names.find('CHOSEONG') >= 0:

            unicode_names = unicode_names.replace('CHOSEONG', 'LETTER')

        elif unicode_names.find('JUNGSEONG') >= 0:

            unicode_names = unicode_names.replace('JUNGSEONG', 'LETTER')

        elif unicode_names.find('JONGSEONG') >= 0:

            unicode_names = unicode_names.replace('JONGSEONG', 'LETTER')

        return unicodedata.lookup(unicode_names)


    jaso = []

    ch = ord(ch) - 0xAC00

    jong = ch % 28

    jung = ((ch - jong) / 28) % 21

    cho = (((ch - jong) / 28) - jung) / 21

    # print 'cho :', cho, (unichr(cho + 0x1100)).encode('utf-8')

    # print 'jung :', jung, (unichr(jung + 0x1161)).encode('utf-8')

    # print 'jong :', jong, (unichr(jong + 0x11A7)).encode('utf-8')

    if cho >= 0:

        jaso.append(conv_compatibility_jamo(unichr(cho + 0x1100)))

    if jung >= 0:

        jaso.append(conv_compatibility_jamo(unichr(jung + 0x1161)))

    if jong > 0:

        jaso.append(conv_compatibility_jamo(unichr(jong + 0x11A7)))

    return ''.join(jaso)

'Computer > Python' 카테고리의 다른 글

한글의 자모 분리  (0) 2015.12.03
inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
Write your message and submit

inline if

Posted 2015. 3. 11. 10:52

파이썬에서 if문을 한줄에 사용하고 싶을 때, 


expression_if_true if condition else expression_if_false


이렇게 하면 된다.

위와 같은 구문은 python이 2.5 버전 이상일 때, 가능하다.


'Computer > Python' 카테고리의 다른 글

한글의 자모 분리  (0) 2015.12.03
inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
Write your message and submit

python 2.x에서...


json.dumps()를 사용하면, json에서 escape가 필요한 것들을 자동으로 esacpe 해주기 때문에 

아주 아주 편리하다.(다른 목적이나 원래 사용하는 목적이 따로 있을 수도 있다...)


하지만, 한글을 json.dumps()에 넣고 변환을 하면...

코드값이 찍혀 불편하다.


이럴 경우에는 이렇게 하면 된다.


json.dumps('한글', ensure_ascii=False)


끝.


공식 메뉴얼 : https://docs.python.org/2/library/json.html

'Computer > Python' 카테고리의 다른 글

한글의 자모 분리  (0) 2015.12.03
inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
Write your message and submit

nested list comprehesion in python

Posted 2015. 1. 10. 07:34

파이썬에서 리스트를 사용할 때, list comprehesion을 통해서 표현하곤 한다.


예를 들자면...


for x in range(10)

     count(x)


이것을 list comprehension으로 표현하면...


[count(x) for x in range(10)]


이런 식으로 표현을 하는 것인데...


중첩 리스트를 어떻게 표현해야 하나 헷갈리는 경우가 많다.(나는... 그렇다.)


중첩 리스트(nested list)는 다음과 같이 표현하면 된다.


for i in range(10):

    for j in range(i):

        count(i, j)


=>


[[count(i, j) for j in range(i)] for i in range(i)]


혹시 if문을 쓰고 싶다면...


[[count(i, j) for j in range(i) if i > 5] for i in range(i)]



이런식으로 사용하면 된다.

오케이3


참고 : http://stackoverflow.com/questions/18072759/python-nested-list-comprehension

'Computer > Python' 카테고리의 다른 글

inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
python2.x에서 unicodedata 사용법  (0) 2014.10.21
Write your message and submit

python OrderedDict

Posted 2014. 12. 4. 23:56

파이썬을 사용하다보면 Dict의 순서가 정렬되지 않아, 정렬이 필요한 경우가 있다.

이럴 때는 다음과 같이 하면 된다.


from collections import OrderedDict

all_ordered_dic = OrderedDict(sorted(all_dic.items(), key=lambda t: t[1]['status']))


1. collections에서 OrderedDict를 import 한 다음...


2. lambda를 이용해서 정렬한다.

여기서는 all_dic[key] = {'status': '+', ... } 와 같은 구조에서 value 중 'status' 값을 기준으로 정렬한다.

sorted(all_dic.items(), key=lambda t: t[1]['status']) 


3. OrderDict를 적용한다.


이렇게 하면... 내가 원하는 순서의 key, value를 사용할 수 있다.

'Computer > Python' 카테고리의 다른 글

inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
python2.x에서 unicodedata 사용법  (0) 2014.10.21
Write your message and submit

파이썬 표준 에러(stderr) 출력

Posted 2014. 11. 21. 16:55

파이썬을 사용하다보면 표준 출력(stdout)과 표준 에러(stderr)를 구별해서 출력해야 할 경우가 있다.

표준 출력이야 그냥 print 로 출력하면 되지만, 

표준 에러는 어떻게 하는지 항상 찾아봐서 ... 하고 있었다.


이렇게 하면 된다.


import sys

print >> sys.stderr, 'stderr'


또는 


sys.stderr.write('stderr')


이렇게 하면 된다.

(아래 참고 링크와 동일한 내용이지만, 기억하기 위해 블로깅 해 놓는다.)


참고 : http://mwultong.blogspot.com/2007/01/python-stderr.html 

'Computer > Python' 카테고리의 다른 글

inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
python2.x에서 unicodedata 사용법  (0) 2014.10.21
Write your message and submit

python2.x에서 unicodedata 사용법

Posted 2014. 10. 21. 11:03

파이썬(python)을 이용하여, 한글을 처리할 때 여러가지 방법이 있겠지만,

다음과 같이 unicodedata라는 클래스를 이용하면 좀 더 편리하게 처리할 수 있다.


unicodedata documenation : https://docs.python.org/2/library/unicodedata.html

unicode type category(5.5.1 General Category Values) : http://www.unicode.org/reports/tr44/tr44-4.html


각 unicode에 대해 어떤 category을 갖는지 확인해서 제거할 수 있으며, 한글의 경우에는 Lo(other characters)에 속한다.


아래 코드는 utf-8 문자열을 입력받아, unicode로 변환한 뒤, 문자열을 돌면서, valid_type만 추출하는 예제이다.

+ Lo 타입에 속하는 한글을 확실하게 구별할 수 있는 방법을 추가한다.

'Computer > Python' 카테고리의 다른 글

inline if  (0) 2015.03.11
파이썬 json.dumps를 한글에 사용하는 방법  (0) 2015.02.01
nested list comprehesion in python  (0) 2015.01.10
python OrderedDict  (0) 2014.12.04
파이썬 표준 에러(stderr) 출력  (0) 2014.11.21
python2.x에서 unicodedata 사용법  (0) 2014.10.21
Write your message and submit