작성자: admin 작성일시: 2016-06-14 23:10:31 조회수: 3015 다운로드: 108
카테고리: Python 태그목록:

konlpy 한국어 처리 패키지 소개

konlpy는 한국어 정보처리를 위한 파이썬 패키지이다.

konlpy는 다음과 같은 다양한 형태소 분석, 태깅 라이브러리를 파이썬에서 쉽게 사용할 수 있도록 모아놓았다.

konlpy 는 다음과 같은 기능을 제공한다.

  • 한국어 corpus
  • 한국어 처리 유틸리티
  • 형태소 분석 및 품사 태깅

한국어 corpus

In:
from konlpy.corpus import kolaw
kolaw.fileids()
Out:
['constitution.txt']
In:
c = kolaw.open('constitution.txt').read()
print(c[:100])
대한민국헌법

유구한 역사와 전통에 빛나는 우리 대한국민은 3·1운동으로 건립된 대한민국임시정부의 법통과 불의에 항거한 4·19민주이념을 계승하고, 조국의 민주개혁과 평화적 통일의
In:
from konlpy.corpus import kobill
kobill.fileids()
Out:
['1809895.txt',
 '1809894.txt',
 '1809898.txt',
 '1809896.txt',
 '1809890.txt',
 '1809899.txt',
 '1809891.txt',
 '1809892.txt',
 '1809893.txt',
 '1809897.txt']
In:
d = kobill.open('1809890.txt').read()
print(d[:100])
지방공무원법 일부개정법률안

(정의화의원 대표발의 )

 의 안
 번 호

9890

발의연월일 : 2010.  11.  12.  

발  의  자 : 정의화․이명수․김을동 

이

한국어 처리 유틸리티

konlpy에는 유니코드 한글 문자열이 리스트나 딕셔너리의 내부에 있을 때도 한글 글자 모양을 정상적으로 보여주는 pprint 유틸리티 함수를 제공한다.

In:
x = [u"한글", {u"한글 키": [u"한글 밸류1", u"한글 밸류2"]}]
print(x)
[u'\ud55c\uae00', {u'\ud55c\uae00 \ud0a4': [u'\ud55c\uae00 \ubc38\ub9581', u'\ud55c\uae00 \ubc38\ub9582']}]
In:
from konlpy.utils import pprint
pprint(x)
[한글,
 {한글 키: [한글 밸류1, 한글 밸류2]}]

형태소 분석

konlpy는 tag 서브패키지에서 형태소 분석을 위한 5개의 클래스를 제공한다.

  • Kkma
  • Hannanum
  • Twitter
  • Komoran
  • Mecab

이 클래스는 다음과 같은 메서드를 대부분 제공한다.

  • morphs : 형태소 추출
  • nouns : 명사 추출
  • pos : pos 태깅
In:
from konlpy.tag import *
hannanum = Hannanum()
kkma = Kkma()
twitter = Twitter()

명사 추출

문자열에서 명사만 추출하려면 noun 명령을 사용한다.

In:
pprint(hannanum.nouns(c[:65]))
[대한민국헌법,
 유구,
 역사,
 전통,
 빛,
 우리,
 대한국민,
 3·1운동,
 건립,
 대한민국임시정부,
 법통,
 불의,
 항거]
In:
pprint(kkma.nouns(c[:65]))
[대한,
 대한민국,
 대한민국헌법,
 민국,
 헌법,
 유구,
 역사,
 전통,
 우리,
 국민,
 3,
 1,
 1운동,
 운동,
 건립,
 대한민국임시정부,
 임시,
 정부,
 법통,
 불의,
 항거]
In:
pprint(twitter.nouns(c[:65]))
[대한민국,
 헌법,
 유구,
 역사,
 전통,
 우리,
 대한,
 국민,
 운동,
 건립,
 대한민국,
 임시정부,
 법,
 통과,
 불의,
 항거]

형태소 추출

명사 뿐 아니라 모든 품사의 형태소를 알아내려면 morphs라는 명령을 사용한다.

In:
pprint(hannanum.morphs(c[:65]))
[대한민국헌법,
 유구,
 하,
 ㄴ,
 역사,
 와,
 전통,
 에,
 빛,
 나는,
 우리,
 대한국민,
 은,
 3·1운동,
 으로,
 건립,
 되,
 ㄴ,
 대한민국임시정부,
 의,
 법통,
 과,
 불의,
 에,
 항거]
In:
pprint(kkma.morphs(c[:65]))
[대한민국,
 헌법,
 유구,
 하,
 ㄴ,
 역사,
 와,
 전통,
 에,
 빛나,
 는,
 우리,
 대하,
 ㄴ,
 국민,
 은,
 3,
 ·,
 1,
 운동,
 으로,
 건립,
 되,
 ㄴ,
 대한민국,
 임시,
 정부,
 의,
 법통,
 과,
 불의,
 에,
 항거]
In:
pprint(twitter.morphs(c[:65]))
[대한민국,
 헌법,
 유구,
 한,
 역사,
 와,
 전통,
 에,
 빛나는,
 우리,
 대한,
 국민,
 은,
 3,
 ·,
 1,
 운동,
 으로,
 건립,
 된,
 대한민국,
 임시정부,
 의,
 법,
 통과,
 불의,
 에,
 항거]

품사 태깅

pos 명령을 사용하면 품사(POS)가 붙어있는(tagging) 형태로 형태소 분석을 한다. 다만 이 때 출력되는 품사의 정의 및 기호는 형태소 분석기 마다 다르므로 각 형태소 분석기에 대한 문서를 찾아봐야 한다.

다음은 많이 쓰이는 형태소 분석기의 품사 기호를 비교한 자료이다.

In:
pprint(hannanum.pos(c[:65]))
[(대한민국헌법, N),
 (유구, N),
 (하, X),
 (ㄴ, E),
 (역사, N),
 (와, J),
 (전통, N),
 (에, J),
 (빛, N),
 (나는, J),
 (우리, N),
 (대한국민, N),
 (은, J),
 (3·1운동, N),
 (으로, J),
 (건립, N),
 (되, X),
 (ㄴ, E),
 (대한민국임시정부, N),
 (의, J),
 (법통, N),
 (과, J),
 (불의, N),
 (에, J),
 (항거, N)]
In:
pprint(kkma.pos(c[:65]))
[(대한민국, NNG),
 (헌법, NNG),
 (유구, NNG),
 (하, XSV),
 (ㄴ, ETD),
 (역사, NNG),
 (와, JC),
 (전통, NNG),
 (에, JKM),
 (빛나, VV),
 (는, ETD),
 (우리, NNM),
 (대하, VV),
 (ㄴ, ETD),
 (국민, NNG),
 (은, JX),
 (3, NR),
 (·, SP),
 (1, NR),
 (운동, NNG),
 (으로, JKM),
 (건립, NNG),
 (되, XSV),
 (ㄴ, ETD),
 (대한민국, NNG),
 (임시, NNG),
 (정부, NNG),
 (의, JKG),
 (법통, NNG),
 (과, JC),
 (불의, NNG),
 (에, JKM),
 (항거, NNG)]
In:
pprint(twitter.pos(c[:65]))
[(대한민국, Noun),
 (헌법, Noun),
 (유구, Noun),
 (한, Josa),
 (역사, Noun),
 (와, Josa),
 (전통, Noun),
 (에, Josa),
 (빛나는, Verb),
 (우리, Noun),
 (대한, Noun),
 (국민, Noun),
 (은, Josa),
 (3, Number),
 (·, Foreign),
 (1, Number),
 (운동, Noun),
 (으로, Josa),
 (건립, Noun),
 (된, Verb),
 (대한민국, Noun),
 (임시정부, Noun),
 (의, Josa),
 (법, Noun),
 (통과, Noun),
 (불의, Noun),
 (에, Josa),
 (항거, Noun)]

질문/덧글

from konlpy.utils import concordance moon*** 2016년 10월 17일 10:34 오후

from konlpy.utils import concordance
idx = concordance(u'대한민국', c, show=True)

에서 concordance 의 기능은 첫번째 인수값을 갖고 있는 c를 가져오는 것인가요?

답변: from konlpy.utils import concordance 관리자 2016년 10월 20일 3:07 오후

문서내의 형태소 위치를 찾는 함수입니다.