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

KoNLPy 한국어 처리 패키지

KoNLPy(코엔엘파이라고 읽는다)는 한국어 정보처리를 위한 파이썬 패키지이다. 자세한 내용은 다음 웹사이트를 참조한다.

한국어 말뭉치

KoNLPy에서는 대한민국 헌법 말뭉치인 kolaw와 국회법안 말뭉치인 kobill을 제공한다. 각 말뭉치가 포함하는 파일의 이름은 fields 메서드로 알 수 있고 open 메서드로 해당 파일의 텍스트를 읽어들인다.

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

유구한 역사와 전통에 빛나는 우리 대한국민은 3·1운동으로
In [3]:
from konlpy.corpus import kobill
kobill.fileids()
Out:
['1809896.txt',
 '1809897.txt',
 '1809895.txt',
 '1809894.txt',
 '1809890.txt',
 '1809891.txt',
 '1809893.txt',
 '1809892.txt',
 '1809899.txt',
 '1809898.txt']
In [4]:
d = kobill.open('1809890.txt').read()
print(d[:40])
지방공무원법 일부개정법률안

(정의화의원 대표발의 )

 의 안
 번 호

형태소 분석

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

여기에서는 한나눔, 꼬꼬마, 오픈코리안텍스트 형태소만 예제로 포함하였다.

In [5]:
from konlpy.tag import *

hannanum = Hannanum()
kkma = Kkma()
okt = Okt()

이 클래스들은 다음과 같은 메서드를 공통적으로 제공한다.

  • nouns : 명사 추출
  • morphs : 형태소 추출
  • pos : 품사 부착

명사 추출

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

In [6]:
hannanum.nouns(c[:40])
Out:
['대한민국헌법', '유구', '역사', '전통', '빛', '우리', '대한국민', '3·1운동']
In [7]:
kkma.nouns(c[:40])
Out:
['대한',
 '대한민국',
 '대한민국헌법',
 '민국',
 '헌법',
 '유구',
 '역사',
 '전통',
 '우리',
 '국민',
 '3',
 '1',
 '1운동',
 '운동']
In [8]:
okt.nouns(c[:40])
Out:
['대한민국', '헌법', '유구', '역사', '전통', '우리', '국민', '운동']

형태소 추출

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

In [9]:
hannanum.morphs(c[:40])
Out:
['대한민국헌법',
 '유구',
 '하',
 'ㄴ',
 '역사',
 '와',
 '전통',
 '에',
 '빛',
 '나는',
 '우리',
 '대한국민',
 '은',
 '3·1운동',
 '으로']
In [10]:
kkma.morphs(c[:40])
Out:
['대한민국',
 '헌법',
 '유구',
 '하',
 'ㄴ',
 '역사',
 '와',
 '전통',
 '에',
 '빛나',
 '는',
 '우리',
 '대하',
 'ㄴ',
 '국민',
 '은',
 '3',
 '·',
 '1',
 '운동',
 '으로']
In [11]:
okt.morphs(c[:40])
Out:
['대한민국',
 '헌법',
 '\n\n',
 '유구',
 '한',
 '역사',
 '와',
 '전통',
 '에',
 '빛나는',
 '우리',
 '대',
 '한',
 '국민',
 '은',
 '3',
 '·',
 '1',
 '운동',
 '으로']

품사 부착

pos 명령을 사용하면 품사 부착을 한다. 다만 이 때 출력되는 품사의 정의 및 기호는 형태소 분석기마다 다르므로 각 형태소 분석기에 대한 문서를 참조한다.

In [12]:
hannanum.pos(c[:40])
Out:
[('대한민국헌법', 'N'),
 ('유구', 'N'),
 ('하', 'X'),
 ('ㄴ', 'E'),
 ('역사', 'N'),
 ('와', 'J'),
 ('전통', 'N'),
 ('에', 'J'),
 ('빛', 'N'),
 ('나는', 'J'),
 ('우리', 'N'),
 ('대한국민', 'N'),
 ('은', 'J'),
 ('3·1운동', 'N'),
 ('으로', 'J')]
In [13]:
kkma.pos(c[:40])
Out:
[('대한민국', 'NNG'),
 ('헌법', 'NNG'),
 ('유구', 'NNG'),
 ('하', 'XSV'),
 ('ㄴ', 'ETD'),
 ('역사', 'NNG'),
 ('와', 'JC'),
 ('전통', 'NNG'),
 ('에', 'JKM'),
 ('빛나', 'VV'),
 ('는', 'ETD'),
 ('우리', 'NNM'),
 ('대하', 'VV'),
 ('ㄴ', 'ETD'),
 ('국민', 'NNG'),
 ('은', 'JX'),
 ('3', 'NR'),
 ('·', 'SP'),
 ('1', 'NR'),
 ('운동', 'NNG'),
 ('으로', 'JKM')]
In [14]:
okt.pos(c[:40])
Out:
[('대한민국', 'Noun'),
 ('헌법', 'Noun'),
 ('\n\n', 'Foreign'),
 ('유구', 'Noun'),
 ('한', 'Josa'),
 ('역사', 'Noun'),
 ('와', 'Josa'),
 ('전통', 'Noun'),
 ('에', 'Josa'),
 ('빛나는', 'Verb'),
 ('우리', 'Noun'),
 ('대', 'Modifier'),
 ('한', 'Modifier'),
 ('국민', 'Noun'),
 ('은', 'Josa'),
 ('3', 'Number'),
 ('·', 'Punctuation'),
 ('1', 'Number'),
 ('운동', 'Noun'),
 ('으로', 'Josa')]

부착되는 품사 태그의 기호와 의미는 tagset 속성으로 확인할 수 있다.

In [15]:
hannanum.tagset
Out:
{'E': '어미',
 'EC': '연결 어미',
 'EF': '종결 어미',
 'EP': '선어말어미',
 'ET': '전성 어미',
 'F': '외국어',
 'I': '독립언',
 'II': '감탄사',
 'J': '관계언',
 'JC': '격조사',
 'JP': '서술격 조사',
 'JX': '보조사',
 'M': '수식언',
 'MA': '부사',
 'MM': '관형사',
 'N': '체언',
 'NB': '의존명사',
 'NC': '보통명사',
 'NN': '수사',
 'NP': '대명사',
 'NQ': '고유명사',
 'P': '용언',
 'PA': '형용사',
 'PV': '동사',
 'PX': '보조 용언',
 'S': '기호',
 'X': '접사',
 'XP': '접두사',
 'XS': '접미사'}

koNLPy의 형태소 분석기와 NLTK의 Text 클래스를 결합하여 문서의 분석이 가능하다.

In [16]:
from nltk import Text

kolaw = Text(okt.nouns(c), name="kolaw")
kolaw.plot(30)
plt.show()
In [22]:
from wordcloud import WordCloud
font_path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
wc = WordCloud(width = 1000, height = 600, background_color="white", font_path=font_path)
plt.imshow(wc.generate_from_frequencies(kolaw.vocab()))
plt.axis("off")
plt.show()
In [ ]:
 

질문/덧글

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 오후

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