[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