3줄의 코드로 형태소 분석 시작하기

이 문서에서는 PyKOMORAN을 이용하여 3줄의 Python 코드 만으로 간단한 형태소 분석을 해보도록 하겠습니다. 아직 PyKOMORAN을 설치하지 않으셨다면, 먼저 설치하기 문서를 참고해주세요.

Note

문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, PyKOMORAN 프로젝트에 이슈 를 남겨주세요.


전체 코드 보기

이번 튜토리얼에서 사용할 전체 코드는 다음과 같습니다. (딱 3줄입니다!)

1
2
3
from PyKomoran import *
komoran = Komoran("EXP")
print(komoran.get_plain_text("KOMORAN은 한국어 형태소 분석기입니다."))

실행 결과는 다음과 같습니다.

# KOMORAN/SL 은/JX 한국어/NNP 형태소/NNP 분석기/NNG 이/VCP ㅂ니다/EF ./SF

이제, 위 코드를 한줄씩 살펴보도록 하겠습니다.

PyKomoran 불러오기

Python 명령어를 실행한 후, 다음과 같이 PyKomoran을 불러옵니다.

1
from PyKomoran import *

위 명령어는 PyKomoran 패키지에 포함된 모든 모듈을 불러옵니다.

Komoran 객체 생성하기

이제, 형태소 분석을 위한 Komoran 객체를 생성합니다. 여기에서는 기본으로 제공하는 모델 중 FULL 모델을 불러오겠습니다.

1
komoran = Komoran("EXP")

이 과정에서 Java 버전의 KOMORAN을 불러오게 되며, 약간의 시간이 소요됩니다. 이제 Komoran 객체의 메소드를 이용하여 형태소를 분석할 수 있습니다.

Note

DEFAULT_MODEL 은 기본적으로 PyKomoran에 포함된 모델로, KOMORAN의 DEFAULT_MODEL 에 대응합니다. 즉, PyKOMORAN의 "EXP""STABLE" 은 각각 KOMORAN의 DEFAULT_MODEL.FULLDEFAULT_MODEL.LIGHT 에 대응합니다.

Todo

DFEAULT_MODEL에 대한 설명을 추가합니다.

형태소 분석하기

PyKOMORAN은 KOMORAN에서 제공하는 다양한 형태의 형태소 분석 결과를 제공합니다. 우선 입력 문장을 형태소 별로 나누어 형태소/품사 형태로 태깅된 결과를 보도록 하겠습니다.

1
2
3
4
print(komoran.get_plain_text("KOMORAN은 한국어 형태소 분석기입니다."))

# # 실행 결과
# KOMORAN/SL 은/JX 한국어/NNP 형태소/NNP 분석기/NNG 이/VCP ㅂ니다/EF ./SF

형태소 분석의 결과인 품사 기호는 품사표 (PoS Table) 에서 찾아보실 수 있습니다.

다양한 방법으로 형태소 분석하기

위에서 살펴본 get_plain_text() 메소드 외에도, 다양한 메소드들을 지원합니다. (PyKomoran.core module 참고)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# PyKomoran 불러오기
from PyKomoran import *

# Komoran 객체 생성
komoran = Komoran("EXP")

# 분석할 문장 준비
str_to_analyze = "① 대한민국은 민주공화국이다. ② 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다."

# get_nouns(): 입력 문장에서 명사만 추출합니다.
print(komoran.get_nouns(str_to_analyze))
# # 실행 결과
# ['대한민국', '민주공화국', '대한민국', '주권', '국민', '권력', '국민']

# get_morphes_by_tags(): 입력 문장에서 주어진 품사들만 추출합니다.
print(komoran.get_morphes_by_tags(str_to_analyze, tag_list=['NNP', 'NNG', 'SF']))
# # 실행 결과
# ['대한민국', '민주공화국', '.', '대한민국', '주권', '국민', '권력', '국민', '.']

# get_plain_text(): 입력 문장 내에 형태소/품사 형태로 태그를 합니다.
print(komoran.get_plain_text(str_to_analyze))
# # 실행 결과
# ①/SW 대한민국/NNP 은/JX 민주공화국/NNP 이/VCP 다/EF ./SF ②/SW 대한민국/NNP 의/JKG 주권/NNP 은/JX 국민/NNG 에게/JKB 있/VV 고/EC ,/SP 모든/MM 권력/NNG 은/JX 국민/NNG 으로부터/JKB 나오/VV ㄴ다/EF ./SF

# get_token_list(): 입력 문장에 대해서 형태소/품사/시작지점/종료지점을 갖는 Token 자료형들을 반환받습니다.
print(komoran.get_token_list(str_to_analyze))
# # 실행 결과
# [①/SW(0,1), 대한민국/NNP(2,6), 은/JX(6,7), 민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16), ②/SW(17,18), 대한민국/NNP(19,23), 의/JKG(23,24), 주권/NNP(25,27), 은/JX(27,28), 국민/NNG(29,31), 에게/JKB(31,33), 있/VV(34,35), 고/EC(35,36), ,/SP(36,37), 모든/MM(38,40), 권력/NNG(41,43), 은/JX(43,44), 국민/NNG(45,47), 으로부터/JKB(47,51), 나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]

# get_token_list(flatten=False): 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 어절 단위로 나누어 반환받습니다.
print(komoran.get_token_list(str_to_analyze, flatten=False))
# # 실행 결과
# [[①/SW(0,1)], [대한민국/NNP(2,6), 은/JX(6,7)], [민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16)], [②/SW(17,18)], [대한민국/NNP(19,23), 의/JKG(23,24)], [주권/NNP(25,27), 은/JX(27,28)], [국민/NNG(29,31), 에게/JKB(31,33)], [있/VV(34,35), 고/EC(35,36), ,/SP(36,37)], [모든/MM(38,40)], [권력/NNG(41,43), 은/JX(43,44)], [국민/NNG(45,47), 으로부터/JKB(47,51)], [나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]]

# get_token_list(flatten=False): 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 품사 기호 대신 이름을 사용합니다.
print(komoran.get_token_list(str_to_analyze, use_pos_name=True))
# # 실행 결과
# [①/기타기호(논리수학기호,화폐기호)(0,1), 대한민국/고유 명사(2,6), 은/보조사(6,7), 민주공화국/고유 명사(8,13), 이/긍정 지정사(13,14), 다/종결 어미(14,15), ./마침표,물음표,느낌표(15,16), ②/기타기호(논리수학기호,화폐기호)(17,18), 대한민국/고유 명사(19,23), 의/관형격 조사(23,24), 주권/고유 명사(25,27), 은/보조사(27,28), 국민/일반 명사(29,31), 에게/부사격 조사(31,33), 있/동사(34,35), 고/연결 어미(35,36), ,/쉼표,가운뎃점,콜론,빗금(36,37), 모든/관형사(38,40), 권력/일반 명사(41,43), 은/보조사(43,44), 국민/일반 명사(45,47), 으로부터/부사격 조사(47,51), 나오/동사(52,54), ㄴ다/종결 어미(53,55), ./마침표,물음표,느낌표(55,56)]

# get_list(): 입력 문장에 대해서 형태소/품사를 갖는 Pair 자료형들을 반환받습니다.
print(komoran.get_list(str_to_analyze))
# # 실행 결과
# [①/SW, 대한민국/NNP, 은/JX, 민주공화국/NNP, 이/VCP, 다/EF, ./SF, ②/SW, 대한민국/NNP, 의/JKG, 주권/NNP, 은/JX, 국민/NNG, 에게/JKB, 있/VV, 고/EC, ,/SP, 모든/MM, 권력/NNG, 은/JX, 국민/NNG, 으로부터/JKB, 나오/VV, ㄴ다/EF, ./SF]

위에서 사용한 메소드들에 대한 자세한 설명은 API 문서 PyKomoran.core module 를 참고해주세요.

결론

지금까지 Python에서 PyKomoran을 이용하여 형태소 분석을 하는 간단한 예제를 살펴보았습니다.

위 예제 코드는 PyKOMORAN tutorials 저장소 에서 확인하시거나, 아래에서 링크에서 다운로드 받으실 수 있습니다.