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.FULL
과
DEFAULT_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 저장소 에서 확인하시거나, 아래에서 링크에서 다운로드 받으실 수 있습니다.