본문 바로가기
개발노트/java

[java] 코모란(KOMORAN) 설치 및 형태소 분석기 사용하기

by 전지적진영시점 2023. 3. 7.
반응형

---------------------------------

OS : Mac

개발 툴 : intelliJ 

개발 언어 : java

개발 프레임워크 : vue3

빌드 도구 : Gradle

---------------------------------

 

안녕하세요 이번 포스팅에서는 코모란(komoran)을 사용해보겠습니다.

 

코모란(komoran)은 java 8 기준으로 배포된 java에서 대표적으로 사용되는 형태소 분석기 오픈소스 입니다!

 

 

환경준비

 

1. 코모란(komoran)은 java8을 기준으로 배포되었기 때문에 java8 이전 버전을 사용하시는 분은 java 버전 업그레이드가 필요합니다.

    java 버전 확인하는 방법은 terminal에서 아래 명령어로 확인하면 됩니다.

java -version

2. 코모란(komoran) jitpack을 통해 패키지를 제공합니다.

    gradle 파일에 repositories 필드에 해당 코드를 추가합니다.

maven { 
   url 'https://jitpack.io' 
}

 

3. gradle build를 하면 코모란(komoran) jar 파일이 프로젝트 내 다운됩니다.

 

 

 

 

 

형태소 분석하기

 

String 객체를 받아 형태소 분석을 하는 코드입니다.

public void analysisChat(String msg) {
    Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
    KomoranResult analyzeResultList = komoran.analyze(msg);

    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());
    }
}

 

1. 코모란(komoran)은 형태소 분석과 관련한 규칙을 데이터로부터 학습하고

   이를 이용하여 형태소 분석을 합니다.. 물론 매번 규칙을 학습할 수 없기에 미리 학습한 규칙을 저장해두는데, 이것을 모델(MODEL) 이라     고 부릅니다. 본 개발소스에서는 default full 모델을 사용합니다.

 

 

2.  default full 모델을 사용하여 객체를 생성하고 analyze() 메서드를 사용하여 분석할 문장을 전달합니다.

 

Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);

 

3. 분석한 내용을 analyzeResultList 에 저장합니다.

 

KomoranResult analyzeResultList = komoran.analyze("나는 오늘 회식간다");

 

4. 각 형태소(token)를 원소로 갖는 목록으로 만듭니다

 

List<Token> tokenList = analyzeResultList.getTokenList();

 

 

결과

 

 

"data": [
        {
            "pos": "NP",
            "endIndex": 1,
            "beginIndex": 0,
            "morph": "나"
        },
        {
            "pos": "JX",
            "endIndex": 2,
            "beginIndex": 1,
            "morph": "는"
        },
        {
            "pos": "NNG",
            "endIndex": 5,
            "beginIndex": 3,
            "morph": "오늘"
        },
        {
            "pos": "NNP",
            "endIndex": 8,
            "beginIndex": 6,
            "morph": "선릉"
        },
        {
            "pos": "JKB",
            "endIndex": 10,
            "beginIndex": 8,
            "morph": "으로"
        },
        {
            "pos": "NNG",
            "endIndex": 13,
            "beginIndex": 11,
            "morph": "회식"
        },
        {
            "pos": "NNP",
            "endIndex": 15,
            "beginIndex": 13,
            "morph": "간다"
        }
    ],
반응형

댓글