형태소 분석 이란 형태소를 비롯하여, 어근, 접두사/접미사, 품사(POS, part-of-speech) 등 다양한 언어적 속성의 구조를 파악하는 것입니다.
품사 태깅 은 형태소의 뜻과 문맥을 고려하여 그것에 마크업을 하는 일입니다. 예를 들어:
가방에 들어가신다 -> 가방/NNG + 에/JKM + 들어가/VV + 시/EPH + ㄴ다/EFN
KoNLPy에는 품사 태깅을 하기 위한 옵션이 여럿 있는데, 이들은 모두 문구(phrase)를 입력받아 태깅된 형태소를 출력하는 동일한 입출력 구조를 가집니다.
더 자세한 설명을 보기 위해서는 tag Package 를 참고해주시기 바랍니다.
이제 tag Package 에 있는 태거들의 성능을 확인해볼까요? 실험은 4개의 코어가 있는 인텔 i7 CPU, 파이썬 2.7, KoNLPy 0.4.1을 이용해 수행되었습니다.
로딩 시간: 사전 로딩을 포함하여 클래스를 로딩하는 시간.
실행시간: 10만 문자의 문서를 대상으로 각 클래스의 pos 메소드를 실행하는데 소요되는 시간.
성능 검증은 몇 개의 샘플 문장을 비교하는 것으로 대체합니다.
“아버지가방에들어가신다”
이 예시를 통해 띄어쓰기 알고리즘의 성능을 확인해볼 수 있습니다. 이상적인 경우, 이 예시에 대해서는 아버지 + 가방에 + 들어가신다 보다는 아버지가 + 방에 + 들어가신다 로 해석하는 것이 더 바람직하겠지요.
Hannanum | Kkma | Komoran | Mecab | |
---|---|---|---|---|
아버지가방에들어가 / N | 아버지 / NNG | 아버지가방에들어가신다 / NNP | 아버지 / NNG | 아버지 / Noun |
이 / J | 가방 / NNG | 가 / JKS | 가방 / Noun | |
시ㄴ다 / E | 에 / JKM | 방 / NNG | 에 / Josa | |
들어가 / VV | 에 / JKB | 들어가신 / Verb | ||
시 / EPH | 들어가 / VV | 다 / Eomi | ||
ㄴ다 / EFN | 신다 / EP+EC |
“나는 밥을 먹는다” vs “하늘을 나는 자동차”
두 문장에서 “나는”에 집중해서 본다면, 각 분석기가 태깅할 때 단어의 의미와 주변부를 잘 살피는지 확인해볼 수 있습니다. 첫번째 문장에서 “나는”은 나/N + 는/J, 두번째 문장에서는 나(-ㄹ다)/V + 는/E 이 되는 것이 바람직합니다.
Hannanum | Kkma | Komoran | Mecab | |
---|---|---|---|---|
나 / N | 나 / NP | 나 / NP | 나 / NP | 나 / Noun |
는 / J | 는 / JX | 는 / JX | 는 / JX | 는 / Josa |
밥 / N | 밥 / NNG | 밥 / NNG | 밥 / NNG | 밥 / Noun |
을 / J | 을 / JKO | 을 / JKO | 을 / JKO | 을 / Josa |
먹 / P | 먹 / VV | 먹 / VV | 먹 / VV | 먹는 / Verb |
는다 / E | 는 / EPT | 는다 / EC | 는다 / EC | 다 / Eomi |
다 / EFN |
Hannanum | Kkma | Komoran | Mecab | |
---|---|---|---|---|
하늘 / N | 하늘 / NNG | 하늘 / NNG | 하늘 / NNG | 하늘 / Noun |
을 / J | 을 / JKO | 을 / JKO | 을 / JKO | 을 / Josa |
나 / N | 날 / VV | 나 / NP | 나 / NP | 나 / Noun |
는 / J | 는 / ETD | 는 / JX | 는 / JX | 는 / Josa |
자동차 / N | 자동차 / NNG | 자동차 / NNG | 자동차 / NNG | 자동차 / Noun |
“아이폰 기다리다 지쳐 애플공홈에서 언락폰질러버렸다 6+ 128기가실버ㅋ”
각 분석기가 사전에 포함되지 않은 단어를 어떻게 해결하는지 확인해볼까요?
Hannanum | Kkma | Komoran | Mecab | |
---|---|---|---|---|
아이폰 / N | 아이 / NNG | 아이폰 / NNP | 아이폰 / NNP | 아이폰 / Noun |
기다리 / P | 폰 / NNG | 기다리 / VV | 기다리 / VV | 기다리 / Verb |
다 / E | 기다리 / VV | 다 / EC | 다 / EC | 다 / Eomi |
지치 / P | 다 / ECS | 지치 / VV | 지쳐 / VV+EC | 지쳐 / Verb |
어 / E | 지치 / VV | 어 / EC | 애플 / NNP | 애플 / Noun |
애플공홈 / N | 어 / ECS | 애플 / NNP | 공 / NNG | 공홈 / Noun |
에서 / J | 애플 / NNP | 공 / NNG | 홈 / NNG | 에서 / Josa |
언락폰질러버렸다 / N | 공 / NNG | 홈 / NNG | 에서 / JKB | 언락폰 / Noun |
6+ / N | 홈 / NNG | 에서 / JKB | 언락 / NNG | 질 / Verb |
128기가실벜 / N | 에서 / JKM | 언 / NNG | 폰 / NNG | 러 / Eomi |
언락 / NNG | 락 / NNG | 질러버렸 / VV+EC+VX+EP | 버렸 / Verb | |
폰 / NNG | 폰 / NNG | 다 / EC | 다 / Eomi | |
질르 / VV | 지르 / VV | 6 / SN | 6 / Number | |
어 / ECS | 어 / EC | + / SY | + / Punctuation | |
버리 / VXV | 버리 / VX | 128 / SN | 128 / Number | |
었 / EPT | 었 / EP | 기 / NNG | 기 / Noun | |
다 / ECS | 다 / EC | 가 / JKS | 가 / Josa | |
6 / NR | 6 / SN | 실버 / NNP | 실버 / Noun | |
+ / SW | + / SW | ㅋ / UNKNOWN | ㅋ / KoreanParticle | |
128 / NR | 128기가실벜 / NA | |||
기가 / NNG | ||||
실버 / NNG | ||||
ㅋ / UN |
주석
이 코드를 컴퓨터에서 실행하시면 위 비교 실험을 직접 수행하실 수 있습니다.
[1] | 각 형태소 분석기 배포판이 아닌, KoNLPy 내부 모듈 간 비교임에 유의해주시기 바랍니다. |