코모란은 Java에서 사용하는 대표적인 오픈소스 형태소 분석기 중 하나이다. 사용하기가 매우 편리하고, 형태소 분석 성능 역시 뛰어나기 때문에 Java든 Python이든 많이 사용하고 있다.
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 파일을 다운로드 한다.
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/
연관 포스팅
'Zero to 시리즈 > Zero to 자연어처리(NLP)' 카테고리의 다른 글
[NLP] 개체명 인식(Named Entity Recognition) 구현하기 (0) | 2022.04.22 |
---|---|
[NLP] Java 금칙어 생성법 (0) | 2022.04.17 |
[NLP] 코모란(Komoran) 사용자사전 만들기 (2) | 2022.04.10 |
[NLP] 형태소 분석 확인 사이트 (0) | 2022.03.10 |
[NLP] 형태소 분석 및 품사(핵심 품사) 이해 (0) | 2022.03.10 |