[Java] 코모란(Komoran) 형태소분석기 사용하기

코모란은 Java에서 사용하는 대표적인 오픈소스 형태소 분석기 중 하나이다. 사용하기가 매우 편리하고, 형태소 분석 성능 역시 뛰어나기 때문에 Java든 Python이든 많이 사용하고 있다. 

 

[Java] 코모란(Komoran) 형태소분석기 사용하기


Pom.xml 

우선 코모란을 설정하기 위해서 pom.xml 디펜던시(dependency)를 설정해야 하는데 코모란 디펜던시를 위해서 레파지토리도 추가해야 한다.

 

Repository

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

 

Dependency

<dependency>
    <groupId>com.github.shin285</groupId>
    <artifactId>KOMORAN</artifactId>
    <version>3.3.4</version>
</dependency>

 

위와 같이 pom.xml 설정이 완료되면, pom.xml을 업데이트하여, 디펜던시 jar 파일을 다운로드 한다.

 

그림 1. repository에 KOMORAN이 있는 모습

 

repository -> com -> github -> shin285 -> KOMORAN -> 3.3.4 폴더에 가면, 그림 1과 같이 jar 파일이 있는 것을 확인할 수 있다.

 

 

사용 예제

import kr.co.shineware.nlp.komoran.constant.DEFAULT_MODEL;
import kr.co.shineware.nlp.komoran.core.Komoran;
import kr.co.shineware.nlp.komoran.model.KomoranResult;
import kr.co.shineware.nlp.komoran.model.Token;

import java.util.List;

public class NLP01 {
    public void action() {
        Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
        String document = "데이터분석은 참 재미있는 것 같아요";

        KomoranResult analyzeResultList = komoran.analyze(document);
        System.out.println(analyzeResultList.getPlainText());

        List<Token> tokenList = analyzeResultList.getTokenList();
        for(Token token : tokenList) {
            System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(),
                    token.getEndIndex(), token.getMorph(), token.getPos());
        }

        List<String> nounList = analyzeResultList.getNouns();
        for(String noun : nounList) {
            System.out.println(noun);
        }
    }
}

 

위 사용 예제를 보면, System.out 출력 내용이 3개가 되는데 각각의 결과는 아래와 같다.

 

데이터/NNG 분석/NNP 은/JX 참/MAG 재미있/VA 는/ETM 것/NNB 같/VA 아요/EC
( 0,  3) 데이터/NNG
( 3,  5) 분석/NNP
( 5,  6) 은/JX
( 7,  8) 참/MAG
( 9, 12) 재미있/VA
(12, 13) 는/ETM
(14, 15) 것/NNB
(16, 17) 같/VA
(17, 19) 아요/EC
데이터
분석

 

코드 설명

Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);

코드에 대해서 설명을 하자면, 우선 KOMORAN에 내장되어 있는 디폴트 Full 모델을 호출한다. 

 

KomoranResult analyzeResultList = komoran.analyze(document);

그리고 komoran의 메소드인 analyze에 인자값으로 텍스트를 넣어서 분석 결과를 KomoranResult 형태로 담는다.

 

System.out.println(analyzeResultList.getPlainText());

위와 같이 getPlainText를 그대로 출력하게 되면, 

 

데이터/NNG 분석/NNP 은/JX 참/MAG 재미있/VA 는/ETM 것/NNB 같/VA 아요/EC

pos tagging이 같이 들어있는 텍스트 형태로, 형태소 분석 결과를 그대로 출력한다. 

 

List<Token> tokenList = analyzeResultList.getTokenList();
for(Token token : tokenList) {
    System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(),
            token.getEndIndex(), token.getMorph(), token.getPos());
}

getTokenList의 메소드를 호출하면, token 형태로 결과를 담게 되는데 이 토큰에는 형태소가 문자열의 어느 위치에서 생성된 것인지, 그리고 형태소 분석 결과가 같이 출력된다.

( 0,  3) 데이터/NNG
( 3,  5) 분석/NNP
( 5,  6) 은/JX
( 7,  8) 참/MAG
( 9, 12) 재미있/VA
(12, 13) 는/ETM
(14, 15) 것/NNB
(16, 17) 같/VA
(17, 19) 아요/EC

특정 품사를 기반으로 개발을 해야 할 경우, getPos에서 어떤 품사가 뽑혔는지를 보면서 개발을 하면 되기에 품사들이 필요할 경우 가장 많이 사용되는 방식이다.

 

List<String> nounList = analyzeResultList.getNouns();
for(String noun : nounList) {
    System.out.println(noun);
}

마지막으로 getNouns를 하면, String List 형태로 리턴이 되는데, 명사만 가져오는 것이기에 이런 심플한 구조로 되어 있다.

데이터
분석

 

참고자료

[1] 코모란, https://www.shineware.co.kr/products/komoran/

 

연관 포스팅

[NLP] 형태소 분석 확인 사이트

[NLP] 형태소 분석 및 품사(핵심 품사) 이해

[konlpy] 형태소 분석기별 품사 태깅(Pos-Tagging) 비교

형태소 분석기, Okt(Open Korean Text) (구)트위터 형태소분석기

댓글

Designed by JB FACTORY