2023.03.19
KOMORAN 형태소 분석기
출처: KOMORAN 문서
출처: 품사표(KOMORAN 문서)
소개
KOMORAN은 Shineware의 기술로만 연구 및 개발된 한국어 형태소 분석기로서 Java Library 형태(jar)로 제공됩니다.
KOMORAN 3.0은 기존 KOMORAN 2.0 대비 속도, 정확도가 개선되었으며 타 형태소 분석기와 달리 여러 어절을 하나의 품사로 분석 가능함으로써 형태소 분석기의 적용 분야에 따라 공백이 포함된 고유명사(영화 제목, 음식점명, 노래 제목, 전문 용어 등)를 더 정확하게 분석할 수 있습니다.
특징
1) PureJava: 100% Java로만 개발되었기 때문에 자바가 설치된 환경이라면 어디서든지 사용 가능합니다.
2) 외부 라이브러리 독립적: 자체 제작한 Library들만을 사용하여 외부 Library와의 의존성 문제가 없습니다.
3) 경량화: 자소 단위 처리, TRIE 사전 등으로 약 50MB 메모리 상에서도 동작 가능합니다.
4) Easy To Use: Library 적용 후 소스 코드 내 1줄만 추가하여 형태소 분석기를 사용할 수 있습니다.
5) 사전 관리 용이: 일반 텍스트 파일의 형태로 구성되어 가독성이 높으며 바로 편집이 가능합니다.
6) 새로운 분석 결과: 타 형태소 분석기와 달리 공백이 포함된 형태소 단위로 분석이 가능합니다.
품사표(PoS Table)
1) KOMORAN 형태소 분석기는 분석된 형태소를 품사로 분리한 결과표를 제공한다.
2) KOMORAN은 21세기 세종계획 의 품사 기준을 따르고 있다. 전체 품사들은 아래 표와 같으며, 세분류를 기준으로 출력된다.
체언 | 명사NN | 일반명사NNG |
고유명사NNP | ||
의존명사NNB | ||
대명사NP | 대명사NP | |
수사NR | ||
용언 | 동사VV | 동사VV |
형용사VA | 형용사VA | |
보조용언VX | 보조용언VX | |
지정사VC | 긍정지정사VCP | |
부정지정사VCN | ||
수식언 | 관형사MM | 관형사MM |
부사MA | 일반부사MAG | |
접속부사MAJ | ||
독립언 | 감탄사IC | 감탄사IC |
관계언 | 격조사JK | 주격조사JKS |
보격조사JKC | ||
관형격조사JKG | ||
목적격조사JKO | ||
부사격조사JKB | ||
호격조사JKV | ||
인용격조사JKQ | ||
보조사JX | 보조사JX | |
접속조사JC | 접속조사JC | |
의존형태 | 어미E | 선어말어미EP |
종결어미EF | ||
연결어미EC | ||
명사형전성어미ETN | ||
관형형전성어미ETM | ||
접두사XP | 체언접두사XPN | |
접미사XS | 명사파생접미사XSN | |
동사파생접미사XSV | ||
형용사파생접미사XSA | ||
어근XR | 어근XR | |
기호 | 마침표,물음표,느낌표SF | 마침표,물음표,느낌표SF |
쉼표,가운뎃점,콜론,빗금SP | 쉼표,가운뎃점,콜론,빗금SP | |
따옴표,괄호표,줄표SS | 따옴표,괄호표,줄표SS | |
줄임표SE | 줄임표SE | |
붙임표(물결,숨김,빠짐)SO | 붙임표(물결,숨김,빠짐)SO | |
외국어SL | 외국어SL | |
한자SH | 한자SH | |
기타기호(논리수학기호,화폐기호)SW | 기타기호(논리수학기호,화폐기호)SW | |
명사추정범주NF | 명사추정범주NF | |
용언추정범주NV | 용언추정범주NV | |
숫자SN | 숫자SN | |
분석불능범주NA | 분석불능범주NA |
build.gradle 설정
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.shin285:KOMORAN:3.3.4'
}
1) repositories { maven { url 'https://jitpack.io' } }를 추가한다.
2) dependencies { implementation 'com.github.shin285:KOMORAN:3.3.4' }를 추가한다.
3) JDK 8버전 이상 사용가능하다. (JDK 11가능)
샘플코드
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;
/**
* 2023.03.19
* @Desc KOMORAN 형태소분석기 OpenAPI
* @version 3.3.4
* 1.Gradle Dependency 추가
* -maven { url 'https://jitpack.io' }
* -implementation 'com.github.shin285:KOMORAN:3.3.4'
* 2.문장의 형태소를 분석해 결과를 리턴한다.
*
* JavaDoc: https://docs.komoran.kr/api/kr/co/shineware/nlp/komoran/core/Komoran.html
* 품사표: https://docs.komoran.kr/firststep/postypes.html
*
* 현재 사용하고 있는 품사표
* -NNG: 일반명사
* -NNP: 고유명사
* -NNB: 의존명사
* -NP: 대명사
* -SL: 외국어(2자 이상)
* -NA: 분석불능범주
*/
@Service
public class KomoranSampleClass {
private Logger logger = LoggerFactory.getLogger(KeywordSvc.class);
private String MORPH_LIST = "NNG,NNP,NNB,NP,SL,NA";
private final String admNm = "sysAdmin";
public void komoranAPISample() {
// Output Instance
Map<String, Integer> resultMap = new HashMap<>();
/*
* @Desc
* 2023.03.19
* KOMORAN 형태소 분석기
* 1.문장을 담은 리스트를 만든다.
* 2.문장 리스트를 StringBuffer.append()를 사용해 합친다.
* 3.형태소분석을 사용해 필요한 품사표의 형태소만 리스트로 선언 및 초기화
* 4.생성된 형태소 리스트에서 형태소가 문장에서 몇 번 사용되었는지 Map으로 관리(형태소:사용횟수)
*/
StringBuffer sb = new StringBuffer();
List<String> list = 문장 리스트;
list.forEach(str -> sb.append(str).append("."));
Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
logger.info("문장리스트: {}", sb);
String str = sb.toString();
List<String> posList = new ArrayList<>();
posList = Arrays.asList(MORPH_LIST.split(","));
KomoranResult analyzeResultList = komoran.analyze(str);
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());
logger.info("{} {}", token.getMorph(), token.getPos());
}
for (String token : analyzeResultList.getMorphesByTags(posList)) {
logger.info("token: {}", token);
int cnt = 0;
if (resultMap.containsKey(token))
cnt = resultMap.get(token);
resultMap.put(token, cnt+1);
}
}
}
사용 후기
공부를 위해 개인적으로 개발하고 있는 어플에서 문장 분석 기능이 필요해 여러가지 찾아봤으나 대부분 유료이거나 원하는 기능이 없었다. KOMORAN은 다른 곳들과 달리 공식 문서 및 샘플코드를 Git에서 직접 관리하고 있어 직관적이고 이해하기 쉬웠다.
또한 사용법이 매우 간단한 편이어서 나 같은 초보자들도 쉽게 사용할 수 있었다.
KOMORAN 공식문서에는 기여하기 페이지가 있는데 이곳에 자신이 기능을 요청하거나 만들어서 전달을 할 수 있다. 시간이 된다면 문장에서 많이 사용된 단어를 내림차순으로 전달해주는 메소드를 만들어서 전달하고 싶다.
끝으로, KOMORAN을 개발하신 SHINEWARE 개발자님들에게 감사함을 전하고 싶다.
'오픈소스' 카테고리의 다른 글
[도커] 웹 어플리케이션 도커 컨테이너 환경 구성하기 (1) | 2024.12.26 |
---|---|
[Logback/k6] Rolling File Appenders 샘플 및 k6 테스트 (0) | 2024.12.06 |
[카프카/스프링부트]Kafka On Docker(WLS2/Window) + SpringBoot 샘플코드 (3) | 2024.11.26 |
[오픈소스] Istio (0) | 2024.10.09 |
[OpenAPI] SVNKit 샘플코드 및 사용후기 (0) | 2023.05.10 |
댓글