KOMORAN 문서¶
KOMORAN [1] 은 Java로 개발된 한국어 형태소 분석기입니다. 그 외, Python에서 실행 가능한 PyKOMORAN 또는 R에서 실행 가능한 RKOMORAN(준비 중)도 함께 개발 중에 있습니다.
주석
KOMORAN은 Apache 2.0 License 로 배포되고 있습니다. 이는 누구나 자유롭게 다운로드 받아 부분 또는 전체를 개인적 또는 상업적 목적으로 이용할 수 있음을 뜻합니다. 더 자세한 내용은 Apache License 를 참고해주세요.
참고자료¶
KOMORAN 참고 자료¶
KOMORAN을 개발한 shineware에서 제공하는 참고자료입니다.
- GitHub 저장소 에 바로 실행할 수 있는 소스 코드가 공개되어 있습니다.
- shineware 홈페이지 에서 KOMORAN 소개 및 데모 를 확인하실 수 있습니다.
- KOMORAN Slack 에 방문하셔서 사용법과 팁 등을 공유해주세요.
다른 언어에서의 KOMORAN¶
Python과 R에서 KOMORAN을 사용할 수 있습니다.
- Python에서 사용 가능한 PyKOMORAN
- PyKOMORAN 저장소 에 전체 소스 코드가 공개되어 있습니다.
- PyPI 저장소 에서 바로 설치 가능한 패키지를 확인하실 수 있습니다.
- PyKomoran 설치하기 에서 설치 방법을 확인해보세요.
- R에서 사용 가능한 RKOMORAN (개발 중)
- RKOMORAN 저장소 에 현재 개발 중인 소스 코드가 공개되어 있습니다.
그 외 참고 자료¶
사용자 분들께서 만들어주신 참고자료입니다.
- 간단히 실행해볼 수 있는 Simple API Server 를 사용해보실 수 있습니다.
- Hyunjoong Kim 님께서 개발하신 Python 버전의 KOMORAN3Py 도 공개되어 있습니다.
개요¶
특징¶
- Pure Java
- 100% Java로만 개발되었기 때문에 자바가 설치된 환경이라면 어디서든지 사용 가능합니다.
- 외부 라이브러리 독립적
- 자체 제작한 Library들만을 사용하여 외부 Library와의 의존성 문제가 없습니다.
- 경량화
- 자소 단위 처리, TRIE 사전 등으로 약 50MB 메모리 상에서도 동작 가능합니다.
- Easy to Use
- Library 적용 후 소스 코드 내 1줄만 추가하여 형태소 분석기를 사용할 수 있습니다.
- 사전 관리 용이
- 일반 텍스트 파일의 형태로 구성되어 가독성이 높으며 바로 편집이 가능합니다.
- 새로운 분석 결과
- 타 형태소 분석기와 달리 공백이 포함된 형태소 단위로 분석이 가능합니다.
분석 예시¶
- 아래는 KOMORAN 데모 를 이용한 분석 예시입니다.
- 입력 문장: 대한민국은 민주공화국이다.

- 입력 문장: 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.

설치하기¶
이 문서에서는 KOMORAN을 개발 프로젝트에 포함하거나 다운로드받는 방법을 살펴보겠습니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
환경 준비¶
Java¶
KOMORAN은 Java 8을 기준으로 개발 및 배포되었습니다. Java 8 이전 버전을 사용하고 계시는 경우 업그레이드해주시기 바랍니다. 사용하시는 Java 버전은 다음과 같이 확인하실 수 있습니다.
java -version
또는, Oracle Java 홈페이지 에서 최신 버전의 Java를 설치하실 수 있습니다.
주석
OpenJDK에서의 동작은 별다른 문제점이 보고되지 않았습니다. OpenJDK 사용 중 이슈가 발생한다면 알려주시기를 부탁드립니다.
운영체제¶
KOMORAN은 JVM이 설치된 환경이라면 별도로 운영체제를 가리지는 않습니다. 다만, 이 문서에서는 macOS를 기준으로 설명합니다.
Git 도구 또는 개발 환경¶
KOMORAN 다운로드를 위해 Git 도구를 준비해주시기 바랍니다. 또는 IntelliJ나 Eclipse 등과 같은 통합 개발 환경(IDE)을 사용하신다면 해당 도구를 통해서 다운로드 받으실 수도 있습니다.
프로젝트 관리도구 사용¶
maven이나 gradle과 같은 프로젝트 관리 도구를 이용하고 계시다면, 다음과 같은 방법으로 프로젝트에 KOMORAN을 포함하실 수 있습니다. KOMORAN은 jitpack 을 이용하여 패키지를 제공하고 있습니다.
주석
KOMORAN 최신 버전은 GitHub 저장소의 배포 메뉴 에서 확인하실 수 있습니다.
Maven 이용하기¶
먼저, pom.xml
파일 내에 다음과 같이 저장소(repository)를 추가합니다. 이미 repositories
항목이 존재한다면,
<repository>...</repository>
부분만 추가합니다.
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
이후, 다음과 같이 의존성(dependency)을 추가합니다. pom.xml
파일 내에 이미 dependencies
항목이
존재한다면 <dependency>...</dependency>
부분만 추가합니다. 다음은 3.3.4
버전을 추가하는 예시입니다.
<dependencies>
<dependency>
<groupId>com.github.shin285</groupId>
<artifactId>KOMORAN</artifactId>
<version>3.3.4</version>
</dependency>
</dependencies>
이렇게 구성된 pom.xml 파일 을 확인해보실 수 있습니다.
Gradle 이용하기¶
먼저, build.gradle
파일 내에 다음과 같이 저장소(repository)를 추가합니다. 이미 repositories
항목이 존재한다면
maven ...
부분만 추가합니다.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
이후, 다음과 같이 의존성(dependency)을 추가합니다. build.gradle
파일 내에 이미 dependencies
항목이 존재한다면
implementation ...
부분만 추가합니다. 다음은 3.3.4
버전을 추가하는 예시입니다.
dependencies {
implementation 'com.github.shin285:KOMORAN:3.3.4'
}
이렇게 구성된 build.gralde 파일 을 확인해보실 수 있습니다.
sbt 이용하기¶
먼저, build.sbt
파일 내에 다음과 같이 저장소(resolver)를 추가합니다.
resolvers += "jitpack" at "https://jitpack.io"
이후, 다음과 같이 의존성(dependency)을 추가합니다. 다음은 3.3.4
버전을 추가하는 예시입니다.
libraryDependencies += "com.github.shin285" % "KOMORAN" % "3.3.4"
소스코드 다운로드¶
KOMORAN 소스코드를 분석하시거나, 수동으로 KOMORAN을 프로젝트에 포함하시고자 할 때 사용하시기를 권장하는 방법입니다. 꾸준한 업그레이드를 위해 Git 도구를 이용하여 GitHub 저장소에서 복제받는 방법을 권장합니다.
git clone https://github.com/shin285/KOMORAN
다운로드 후에는 해당 디렉토리 내에서 git pull 명령어를 통해 최신 소스를 받아올 수 있습니다.
cd KOMORAN
git pull
더 보기
Git 도구 홈페이지에서 사용법 을 익히실 수 있습니다.
주석
특정 버전의 KOMORAN을 다운로드 받으실 때는 GitHub 저장소의 배포 메뉴 를 이용하시면 버전별로 압축된 소스코드를 다운로드 받으실 수 있습니다.
3분 만에 형태소 분석 따라하기¶
이 문서에서는 KOMORAN을 이용한 간단한 형태소 분석을 해보도록 하겠습니다. 만약 gradle이나 maven과 같은 프로젝트 관리도구를 사용하고 있지 않다면, Gradle/Maven 없이 형태소 분석 따라하기 문서를 참고해주세요.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
프로젝트 시작하기¶
일반 Java 프로젝트를 시작한 상황을 가정해보도록 하겠습니다. 먼저 Gradle에 KOMORAN 의존성을 추가한 후, 객체를 생성하여 분석 결과를 출력해보도록 하겠습니다.
전체 프로젝트 구조는 다음과 같습니다.
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
└── main
└── java
└── kr
└── co
└── shineware
└── komoran
└── tutorials
└── App.java
의존성 추가하기¶
먼저 build.gradle
파일을 다음과 같이 수정하여 의존성을 추가하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | plugins {
id 'java'
}
group 'kr.co.shineware.komoran.tutorials'
version '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.shin285:KOMORAN:3.3.4'
}
|
설치하기 에서 살펴봤던 것과 같이, 13번째 줄과 15번째 줄에 저장소와 의존성을 추가하였습니다. 이렇게 하면, Gradle이 의존성에 추가된 Library를 저장소에서 찾아 프로젝트의 외부 Library로 추가합니다.
형태소 분석하기¶
이제 Java 클래스를 하나 만들어 형태소 분석을 해보도록 하겠습니다.
여기에서는 kr.co.shineware.komoran.tutorials
패키지에 App
클래스를 추가하였습니다.
전체 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 App {
public static void main(String[] args) {
Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
String strToAnalyze = "대한민국은 민주공화국이다.";
KomoranResult analyzeResultList = komoran.analyze(strToAnalyze);
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());
}
}
}
|
10번째 줄에서는 FULL 모델을 갖는 Komoran
객체를 선언하였습니다. 모델의 종류와 설명에 대해서는 이 문서를 참고해주세요.
과제
FULL / LIGHT 모델의 차이를 설명한 문서를 작성하고, 링크합니다.
13번째 줄에서 생성한 Komoran
객체의 analyze()
메소드의 인자로 분석할 문장을 전달하고, 그 결과를
KomoranResult
객체로 저장합니다. KomoranResult
객체는 분석 결과를 보여주는 몇 가지 메소드들을 갖고
있는데, 여기서는 그 중 2가지를 살펴보겠습니다.
첫번째는 형태소 분석 결과가 태깅된 문장 형태를 받아보는 것으로, getPlainText()
메소드를 호출하면 됩니다.
15번째 줄에서는 이러한 결과를 바로 출력하고 있습니다.
두번째 결과는 각 형태소(Token
)를 원소로 갖는 목록(List)으로 받는 것으로, getTokenList()
메소드를
호출하면 됩니다. Token
은 형태소와 품사, 그리고 시작/끝 지점을 갖는 객체로, KOMORAN에서 사용하는 모델입니다.
과제
KOMORAN에서 사용하는 다양한 모델(Tag, Token 및 KomoranResult 등)에 대한 문서를 추가한 후, 링크합니다.
20번째 줄에서는 각 형태소별 시작/끝 지점 및 형태소와 품사를 형식에 맞춰 줄력하고 있습니다.
위와 같이 실행한 결과는 다음과 같습니다.
대한민국/NNP 은/JX 민주공화국/NNP 이/VCP 다/EF ./SF
( 0, 4) 대한민국/NNP
( 4, 5) 은/JX
( 6, 11) 민주공화국/NNP
(11, 12) 이/VCP
(12, 13) 다/EF
(13, 14) ./SF
Gradle/Maven 없이 형태소 분석 따라하기¶
이 문서에서는 KOMORAN을 이용한 간단한 형태소 분석을 해보도록 하겠습니다.
만약 Gradle
이나 Maven
같은 프로젝트 관리도구를 사용하고 있다면,
3분 만에 형태소 분석 따라하기 문서를 참고해주세요.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
프로젝트 시작하기¶
프로젝트 관리도구 없이, 직접 Jar 파일을 추가하여 간단한 형태소 분석을 해보겠습니다. 전체 프로젝트 구조는 다음과 같습니다.
.
├── App.java
└── libs
└── KOMORAN-3.3.4.jar
의존성 추가하기¶
설치하기 의 Jar 파일 만들기
부분을 참고하여 Jar 파일을 생성합니다.
생성한 Jar 파일은 libs
디렉토리를 만든 후, 그 안에 위치시킵니다.
주석
직접 생성한 Jar 파일의 이름은 KOMORAN.jar
이지만, 여기서는 관리를 위해 뒤에 버전을 추가하여
KOMORAN-3.3.4.jar
로 파일명을 변경하였습니다.
형태소 분석하기¶
이제 Java 클래스를 하나 만들어 형태소 분석을 해보도록 하겠습니다. 여기에서는 별도 패키지 없이,
바로 App.java
파일을 만들고 App
클래스를 추가하였습니다.
App.java
파일의 전체 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 App {
public static void main(String[] args){
Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
String strToAnalyze = "대한민국은 민주공화국이다.";
KomoranResult analyzeResultList = komoran.analyze(strToAnalyze);
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());
}
}
}
|
10번째 줄에서는 FULL 모델을 갖는 Komoran
객체를 선언하였습니다. 모델의 종류와 설명에 대해서는 이 문서를 참고해주세요.
과제
FULL / LIGHT 모델의 차이를 설명한 문서를 작성하고, 링크합니다.
13번째 줄에서 생성한 Komoran
객체의 analyze()
메소드의 인자로 분석할 문장을 전달하고, 그 결과를
KomoranResult
객체로 저장합니다. KomoranResult
객체는 분석 결과를 보여주는 몇 가지 메소드들을 갖고
있는데, 여기서는 그 중 2가지를 살펴보겠습니다.
첫번째는 형태소 분석 결과가 태깅된 문장 형태를 받아보는 것으로, getPlainText()
메소드를 호출하면 됩니다.
15번째 줄에서는 이러한 결과를 바로 출력하고 있습니다.
두번째 결과는 각 형태소(Token
)를 원소로 갖는 목록(List)으로 받는 것으로, getTokenList()
메소드를
호출하면 됩니다. Token
은 형태소와 품사, 그리고 시작/끝 지점을 갖는 객체로, KOMORAN에서 사용하는 모델입니다.
과제
KOMORAN에서 사용하는 다양한 모델(Tag, Token 및 KomoranResult 등)에 대한 문서를 추가한 후, 링크합니다.
20번째 줄에서는 각 형태소별 시작/끝 지점 및 형태소와 품사를 형식에 맞춰 줄력하고 있습니다.
실행하기¶
App.java
파일이 위치한 곳에서 다음과 같이 Java 파일을 Class 파일로 컴파일합니다.:
javac -cp "./libs/KOMORAN-3.3.4.jar:" App.java
위 명령어는 libs
디렉토리 내에 있는 KOMORAN-3.3.4.jar
파일을 포함하여 App.java
를 컴파일하도록 하는 명령어입니다.
이제, App.class
파일이 생성된 것을 확인하실 수 있는데요, 이 파일을 실행해보겠습니다.:
java -cp ".:./libs/KOMORAN-3.3.4.jar:" App
다음과 같이 실행 결과를 볼 수 있습니다.
대한민국/NNP 은/JX 민주공화국/NNP 이/VCP 다/EF ./SF
( 0, 4) 대한민국/NNP
( 4, 5) 은/JX
( 6, 11) 민주공화국/NNP
(11, 12) 이/VCP
(12, 13) 다/EF
(13, 14) ./SF
품사표 (PoS Table)¶
이 문서에서는 KOMORAN의 형태소 품사 종류를 살펴보겠습니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
KOMORAN은 21세기 세종계획 의 품사 기준 [1] 을 따르고 있습니다. 전체 품사들은 아래 표와 같으며, 세분류를 기준으로 출력됩니다.
대분류 | 소분류 | 세분류 |
---|---|---|
체언 | 명사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 |
[1] | 김홍규 외, 『21세기 세종계획 국어 기초자료 구축』, 문화관광부(2004), p.126 |
분석 예제¶
이 문서에서는 KOMORAN 모델 학습 예제를 살펴보겠습니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
들어가기¶
KOMORAN을 아직 설치하지 않으셨거나 프로젝트에 포함하는 방법을 모르신다면, 설치하기 또는 3분 만에 형태소 분석 따라하기 문서를 먼저 참고해주세요.
문장 분석¶
다음과 같은 예시 코드를 사용하여 분석할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package kr.co.shineware.nlp.komoran.test;
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 KomoranTest {
public static void main(String[] args) throws Exception {
Komoran komoran = new Komoran(DEFAULT_MODEL.LIGHT);
komoran.setFWDic("user_data/fwd.user");
komoran.setUserDic("user_data/dic.user");
String input = "밀리언 달러 베이비랑 바람과 함께 사라지다랑 뭐가 더 재밌었어?";
KomoranResult analyzeResultList = komoran.analyze(input);
List<Token> tokenList = analyzeResultList.getTokenList();
// 1. print each tokens by getTokenList()
System.out.println("==========print 'getTokenList()'==========");
for (Token token : tokenList) {
System.out.println(token);
System.out.println(token.getMorph()+"/"+token.getPos()+"("+token.getBeginIndex()+","+token.getEndIndex()+")");
System.out.println();
}
// 2. print nouns
System.out.println("==========print 'getNouns()'==========");
System.out.println(analyzeResultList.getNouns());
System.out.println();
// 3. print analyzed result as pos-tagged text
System.out.println("==========print 'getPlainText()'==========");
System.out.println(analyzeResultList.getPlainText());
System.out.println();
// 4. print analyzed result as list
System.out.println("==========print 'getList()'==========");
System.out.println(analyzeResultList.getList());
System.out.println();
// 5. print morphes with selected pos
System.out.println("==========print 'getMorphesByTags()'==========");
System.out.println(analyzeResultList.getMorphesByTags("NP", "NNP", "JKB"));
}
}
|
분석 결과¶
위 코드를 실행한 결과는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ==========print 'getTokenList()'==========
Token [morph=밀리언 달러 베이비, pos=NNP, beginIndex=0, endIndex=10]
밀리언 달러 베이비/NNP(0,10)
Token [morph=랑, pos=JKB, beginIndex=10, endIndex=11]
랑/JKB(10,11)
Token [morph=바람과 함께 사라지다, pos=NNP, beginIndex=12, endIndex=23]
바람과 함께 사라지다/NNP(12,23)
Token [morph=랑, pos=JKB, beginIndex=23, endIndex=24]
랑/JKB(23,24)
Token [morph=뭐, pos=NP, beginIndex=25, endIndex=26]
뭐/NP(25,26)
Token [morph=가, pos=JKS, beginIndex=26, endIndex=27]
가/JKS(26,27)
Token [morph=더, pos=MAG, beginIndex=28, endIndex=29]
더/MAG(28,29)
Token [morph=재밌, pos=VA, beginIndex=30, endIndex=32]
재밌/VA(30,32)
Token [morph=었, pos=EP, beginIndex=32, endIndex=33]
었/EP(32,33)
Token [morph=어, pos=EF, beginIndex=33, endIndex=34]
어/EF(33,34)
Token [morph=?, pos=SF, beginIndex=34, endIndex=35]
?/SF(34,35)
==========print 'getNouns()'==========
[밀리언 달러 베이비, 바람과 함께 사라지다]
==========print 'getPlainText()'==========
밀리언 달러 베이비/NNP 랑/JKB 바람과 함께 사라지다/NNP 랑/JKB 뭐/NP 가/JKS 더/MAG 재밌/VA 었/EP 어/EF ?/SF
==========print 'getList()'==========
[Pair [first=밀리언 달러 베이비, second=NNP], Pair [first=랑, second=JKB], Pair [first=바람과 함께 사라지다, second=NNP], Pair [first=랑, second=JKB], Pair [first=뭐, second=NP], Pair [first=가, second=JKS], Pair [first=더, second=MAG], Pair [first=재밌, second=VA], Pair [first=었, second=EP], Pair [first=어, second=EF], Pair [first=?, second=SF]]
==========print 'getMorphesByTags()'==========
[밀리언 달러 베이비, 랑, 바람과 함께 사라지다, 랑, 뭐]
|
과제
사용 가능한 API 문서를 작성하고, 링크합니다.
모델 학습 예제¶
이 문서에서는 KOMORAN을 이용한 형태소 분석 예제를 살펴보겠습니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
들어가기¶
KOMORAN을 아직 설치하지 않으셨거나 프로젝트에 포함하는 방법을 모르신다면, 설치하기 또는 3분 만에 형태소 분석 따라하기 문서를 먼저 참고해주세요.
문장 분석¶
다음과 같은 예시 코드를 사용하여 모델을 학습할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package kr.co.shineware.nlp.komoran.test;
import kr.co.shineware.nlp.komoran.modeler.builder.ModelBuilder;
import java.io.File;
public class ModelBuildTest {
public static void main(String[] args) {
modelSave();
modelLoad();
}
private static void modelLoad() {
ModelBuilder builder = new ModelBuilder();
builder.load("models");
}
private static void modelSave() {
ModelBuilder builder = new ModelBuilder();
//external dictionary for out of vocabulary
builder.setExternalDic("user_data"+ File.separator+"wiki.titles");
//training corpus path must include dictionary, grammar and irregular dictionary
builder.buildPath("corpus_build");
//path to save models
builder.save("models");
}
}
|
과제
학습에 필요한 데이터 및 모델 학습 결과, 모델 사용 방법 등에 대한 내용 추가가 필요합니다.
Spark2 분석 예제 (Scala)¶
이 문서에서는 Spark2에서 KOMORAN을 이용한 분석 예제를 살펴보겠습니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
들어가기¶
KOMORAN을 아직 설치하지 않으셨거나 프로젝트에 포함하는 방법을 모르신다면, 설치하기 또는 3분 만에 형태소 분석 따라하기 문서를 먼저 참고해주세요.
문장 분석¶
다음과 같은 예시 코드를 사용하여 분석할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import kr.co.shineware.nlp.komoran.constant.DEFAULT_MODEL
import kr.co.shineware.nlp.komoran.core.Komoran
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.expressions.UserDefinedFunction
import org.apache.spark.sql.functions.udf
import scala.collection.JavaConverters._
object Main {
val komoran = new Komoran(DEFAULT_MODEL.LIGHT)
val getPlainTextUdf: UserDefinedFunction = udf[String, String] { sentence =>
komoran.analyze(sentence).getPlainText
}
val getNounsUdf: UserDefinedFunction = udf[Seq[String], String] { sentence =>
komoran.analyze(sentence).getNouns.asScala
}
val getTokenListUdf: UserDefinedFunction = udf[Seq[String], String] { sentence =>
komoran.analyze(sentence).getTokenList.asScala.map(x => x.toString)
}
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().enableHiveSupport().getOrCreate()
import spark.implicits._
val testDataset = spark.createDataFrame(Seq(
"밀리언 달러 베이비랑 바람과 함께 사라지다랑 뭐가 더 재밌었어?",
"아버지가방에들어가신다",
"나는 밥을 먹는다",
"하늘을 나는 자동차",
"아이폰 기다리다 지쳐 애플공홈에서 언락폰질러버렸다 6+ 128기가실버ㅋ"
).map(Tuple1.apply)).toDF("sentence")
// 1. print test data
testDataset.show(truncate = false)
val analyzedDataset =
testDataset.withColumn("plain_text", getPlainTextUdf($"sentence"))
.withColumn("nouns", getNounsUdf($"sentence"))
.withColumn("token_list", getTokenListUdf($"sentence"))
// 2. print test data and analyzed result as list
analyzedDataset.select("sentence", "token_list").show()
// 3. print test data and morphes with selected pos
analyzedDataset.select("sentence", "nouns").show()
// 4. print test data and analyzed result as pos-tagged text
analyzedDataset.select("sentence", "plain_text").show()
}
}
|
분석 결과¶
위 코드를 실행한 결과는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | +---------------------------------------+
|sentence |
+---------------------------------------+
|밀리언 달러 베이비랑 바람과 함께 사라지다랑 뭐가 더 재밌었어? |
|아버지가방에들어가신다 |
|나는 밥을 먹는다 |
|하늘을 나는 자동차 |
|아이폰 기다리다 지쳐 애플공홈에서 언락폰질러버렸다 6+ 128기가실버ㅋ|
+---------------------------------------+
+--------------------+--------------------+
| sentence| token_list|
+--------------------+--------------------+
|밀리언 달러 베이비랑 바람과 함...|[Token [morph=밀리,...|
| 아버지가방에들어가신다|[Token [morph=아버지...|
| 나는 밥을 먹는다|[Token [morph=나, ...|
| 하늘을 나는 자동차|[Token [morph=하늘,...|
|아이폰 기다리다 지쳐 애플공홈에...|[Token [morph=아이,...|
+--------------------+--------------------+
+--------------------+--------------------+
| sentence| nouns|
+--------------------+--------------------+
|밀리언 달러 베이비랑 바람과 함...| [베이비, 바람]|
| 아버지가방에들어가신다| [아버지, 가방]|
| 나는 밥을 먹는다| [밥]|
| 하늘을 나는 자동차| [하늘, 자동차]|
|아이폰 기다리다 지쳐 애플공홈에...|[아이, 폰, 애플, 공, 홈,...|
+--------------------+--------------------+
+--------------------+--------------------+
| sentence| plain_text|
+--------------------+--------------------+
|밀리언 달러 베이비랑 바람과 함...|밀리/VV 어/EC ㄴ/JX 달...|
| 아버지가방에들어가신다|아버지/NNG 가방/NNG 에/...|
| 나는 밥을 먹는다|나/NP 는/JX 밥/NNG 을...|
| 하늘을 나는 자동차|하늘/NNG 을/JKO 나/NP...|
|아이폰 기다리다 지쳐 애플공홈에...|아이/NNG 폰/NNP 기다리/...|
+--------------------+--------------------+
|
과제
사용 가능한 API 문서를 작성하고, 링크합니다.
PyKomoran 설치하기¶
이 문서에서는 Python에서 KOMORAN을 사용하기 위해 PyKOMORAN을 설치하는 방법을 살펴보도록 하겠습니다.
주석
PyKOMORAN은 KOMORAN을 Python에서 사용할 수 있도록 하는 프로젝트입니다. 이는 KOMORAN을 Python으로 재작성한 것이 아니라, Python에서 Java용 KOMORAN을 실행하는 것을 뜻합니다.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
환경 준비¶
Java¶
KOMORAN을 실행하기 위한 Java 환경이 준비되어야 합니다. Java 8 이상의 버전을 사용하셔야 하며, 사용하고 계신 Java 버전은 다음과 같이 확인하실 수 있습니다.
java -version
또는, Oracle Java 홈페이지 에서 최신 버전의 Java를 설치하실 수 있습니다.
주석
OpenJDK에서의 동작 중 별다른 문제점은 아직 알려지지 않았습니다. OpenJDK 사용 중 이슈가 발생한다면 알려주시기를 부탁드립니다.
Python 3¶
PyKOMORAN은 Python 3.4 이상을 지원합니다. 사용하고 계신 Python 버전은 다음과 같이 확인하실 수 있습니다.
python --version
# 또는, python3 버전을 확인해보실 수 있습니다.
python3 --version
또는, Python 홈페이지 에서 최신 버전의 Python을 설치하실 수 있습니다.
주석
Python 2.7은 2019년 12월 31일을 마지막으로 지원이 종료될 예정으로, PyKOMORAN은 Python 2.7을 지원하지 않도록 개발되었습니다.
Py4J¶
Py4J 는 Java 버전의 KOMORAN을 Python에서 실행할 수 있도록 도와주는 Library입니다. 아래 pip 패키지 관리도구 를 이용하여 PyKomoran을 설치하는 경우 자동으로 함께 설치됩니다.
pip 패키지 관리도구¶
PyKOMORAN은 PyPI(Python Package Index)를 통해 설치하시는 것이 가장 편하고 쉽습니다. 이를 위해 Python 3.4 이상을 지원하는 pip가 설치되어있는지 다음과 같이 확인하실 수 있습니다.
pip --version
# 또는, pip3 버전을 확인해보실 수 있습니다.
pip3 --version
위 명령어는 pip 버전과 함께 Python 버전을 출력합니다.
소스코드 다운로드¶
PyKOMORAN를 분석하시거나, 기여를 위해 소스코드를 직접 다운로드 받으실 수도 있습니다. 꾸준한 업그레이드를 위해 Git 도구를 이용하여 GitHub 저장소에서 복제받는 방법을 권장합니다.
git clone https://github.com/shineware/PyKOMORAN
다운로드 후에는 해당 디렉토리 내에서 git pull 명령어를 통해 최신 소스를 받아올 수 있습니다.
cd PyKOMORAN
git pull
더 보기
Git 도구 홈페이지에서 사용법 을 익히실 수 있습니다.
주석
특정 버전의 PyKOMORAN을 다운로드 받으실 때는 GitHub 저장소의 배포 메뉴 를 이용하시면 버전별로 압축된 소스코드를 다운로드 받으실 수 있습니다.
3줄의 코드로 형태소 분석 시작하기¶
이 문서에서는 PyKOMORAN을 이용하여 3줄의 Python 코드 만으로 간단한 형태소 분석을 해보도록 하겠습니다. 아직 PyKOMORAN을 설치하지 않으셨다면, 먼저 PyKomoran 설치하기 문서를 참고해주세요.
주석
문서의 내용 중 지원되지 않거나 잘못된 내용을 발견하실 경우, KOMORAN 문서 프로젝트에 이슈 를 남겨주세요.
전체 코드 보기¶
이번 튜토리얼에서 사용할 전체 코드는 다음과 같습니다. (딱 3줄입니다!)
1 2 3 | from PyKomoran import *
komoran = Komoran()
print(komoran.get_plain_text("KOMORAN은 한국어 형태소 분석기입니다."))
|
실행 결과는 다음과 같습니다.
KOMORAN/SL 은/JX 한국어/NNP 형태소/NNP 분석기/NNG 이/VCP ㅂ니다/EF ./SF
이제, 위 코드를 한줄씩 살펴보도록 하겠습니다.
PyKomoran 불러오기¶
Python 명령어를 실행한 후, 다음과 같이 PyKomoran을 불러옵니다.
1 | from PyKomoran import *
|
위 명령어는 PyKomoran 패키지에 포함된 모든 모듈을 불러옵니다.
Komoran 객체 생성하기¶
이제, 형태소 분석을 위한 Komoran
객체를 생성합니다.
1 | komoran = Komoran()
|
이 과정에서 Java 버전의 KOMORAN을 불러오게 되며, 약간의 시간이 소요됩니다.
이제 Komoran
객체의 메소드를 이용하여 형태소를 분석할 수 있습니다.
형태소 분석하기¶
PyKOMORAN은 KOMORAN에서 제공하는 다양한 형태의 형태소 분석 결과를 제공합니다.
우선 입력 문장을 형태소 별로 나누어 형태소/품사
형태로 태깅된 결과를 보도록 하겠습니다.
1 2 3 4 | print(komoran.get_plain_text("KOMORAN은 한국어 형태소 분석기입니다."))
# # 실행 결과
# KOMORAN/SL 은/JX 한국어/NNP 형태소/NNP 분석기/NNG 이/VCP ㅂ니다/EF ./SF
|
형태소 분석의 결과인 품사 기호는 품사표 (PoS Table) 에서 찾아보실 수 있습니다.
다양한 방법으로 형태소 분석하기¶
위에서 살펴본 get_plain_text()
메소드 외에도, 다양한 메소드들을 지원합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # PyKomoran 불러오기
from PyKomoran import *
# Komoran 객체 생성
komoran = Komoran()
# 분석할 문장 준비
str_to_analyze = "① 대한민국은 민주공화국이다. ② 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다."
# get_nouns(): 입력 문장에서 명사만 추출합니다.
print(komoran.get_nouns(str_to_analyze))
# # 실행 결과
# ['대한민국', '민주공화국', '대한민국', '주권', '국민', '권력', '국민']
# get_morphes_by_tags(): 입력 문장에서 주어진 품사들만 추출합니다.
print(komoran.get_morphes_by_tags(str_to_analyze, tag_list=['NNP', 'NNG', 'SF']))
# # 실행 결과
# ['대한민국', '민주공화국', '.', '대한민국', '주권', '국민', '권력', '국민', '.']
# get_plain_text(): 입력 문장 내에 형태소/품사 형태로 태그를 합니다.
print(komoran.get_plain_text(str_to_analyze))
# # 실행 결과
# ①/SW 대한민국/NNP 은/JX 민주공화국/NNP 이/VCP 다/EF ./SF ②/SW 대한민국/NNP 의/JKG 주권/NNP 은/JX 국민/NNG 에게/JKB 있/VV 고/EC ,/SP 모든/MM 권력/NNG 은/JX 국민/NNG 으로부터/JKB 나오/VV ㄴ다/EF ./SF
# get_token_list(): 입력 문장에 대해서 형태소/품사/시작지점/종료지점을 갖는 Token 자료형들을 반환받습니다.
print(komoran.get_token_list(str_to_analyze))
# # 실행 결과
# [①/SW(0,1), 대한민국/NNP(2,6), 은/JX(6,7), 민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16), ②/SW(17,18), 대한민국/NNP(19,23), 의/JKG(23,24), 주권/NNP(25,27), 은/JX(27,28), 국민/NNG(29,31), 에게/JKB(31,33), 있/VV(34,35), 고/EC(35,36), ,/SP(36,37), 모든/MM(38,40), 권력/NNG(41,43), 은/JX(43,44), 국민/NNG(45,47), 으로부터/JKB(47,51), 나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]
# get_token_list(flatten=False): 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 어절 단위로 나누어 반환받습니다.
print(komoran.get_token_list(str_to_analyze, flatten=False))
# # 실행 결과
# [[①/SW(0,1)], [대한민국/NNP(2,6), 은/JX(6,7)], [민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16)], [②/SW(17,18)], [대한민국/NNP(19,23), 의/JKG(23,24)], [주권/NNP(25,27), 은/JX(27,28)], [국민/NNG(29,31), 에게/JKB(31,33)], [있/VV(34,35), 고/EC(35,36), ,/SP(36,37)], [모든/MM(38,40)], [권력/NNG(41,43), 은/JX(43,44)], [국민/NNG(45,47), 으로부터/JKB(47,51)], [나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]]
# get_token_list(flatten=False): 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 품사 기호 대신 이름을 사용합니다.
print(komoran.get_token_list(str_to_analyze, use_pos_name=True))
# # 실행 결과
# [①/기타기호(논리수학기호,화폐기호)(0,1), 대한민국/고유 명사(2,6), 은/보조사(6,7), 민주공화국/고유 명사(8,13), 이/긍정 지정사(13,14), 다/종결 어미(14,15), ./마침표,물음표,느낌표(15,16), ②/기타기호(논리수학기호,화폐기호)(17,18), 대한민국/고유 명사(19,23), 의/관형격 조사(23,24), 주권/고유 명사(25,27), 은/보조사(27,28), 국민/일반 명사(29,31), 에게/부사격 조사(31,33), 있/동사(34,35), 고/연결 어미(35,36), ,/쉼표,가운뎃점,콜론,빗금(36,37), 모든/관형사(38,40), 권력/일반 명사(41,43), 은/보조사(43,44), 국민/일반 명사(45,47), 으로부터/부사격 조사(47,51), 나오/동사(52,54), ㄴ다/종결 어미(53,55), ./마침표,물음표,느낌표(55,56)]
# get_list(): 입력 문장에 대해서 형태소/품사를 갖는 Pair 자료형들을 반환받습니다.
print(komoran.get_list(str_to_analyze))
# # 실행 결과
# [①/SW, 대한민국/NNP, 은/JX, 민주공화국/NNP, 이/VCP, 다/EF, ./SF, ②/SW, 대한민국/NNP, 의/JKG, 주권/NNP, 은/JX, 국민/NNG, 에게/JKB, 있/VV, 고/EC, ,/SP, 모든/MM, 권력/NNG, 은/JX, 국민/NNG, 으로부터/JKB, 나오/VV, ㄴ다/EF, ./SF]
|
과제
PyKOMORAN에서 지원하는 메소드 목록, 자료형 등을 정리합니다.
결론¶
지금까지 Python에서 PyKomoran을 이용하여 형태소 분석을 하는 간단한 예제를 살펴보았습니다.
위 예제 코드는 PyKOMORAN tutorials 저장소 에서 확인하시거나, 아래에서 링크에서 다운로드 받으실 수 있습니다.
Java API¶
본 문서에서는 Komoran에서 제공되는 다양한 API 들에 대해서 살펴봅니다.
Komoran¶
public Komoran(String modelPath)
Komoran 생성자 입니다. 모델 경로를 인자로 받으며 Komoran 생성 시 해당 모델을 로드합니다.
public Komoran(DEFAULT_MODEL modelType)
Komoran 생성자 입니다. 기본으로 제공하는 모델을 선택하여 생성합니다. DEFAULT_MODEL.LIGHT와 DEFAULT_MODEL.FULL의 두 가지 버전을 기본적으로 제공합니다.
void setFWDic(String filename)
기분석 사전을 로드합니다. 기분석 사전의 경로를 인자로 받습니다.
void setUserDic(String userDic)
사용자 사전을 로드합니다. 사용자 사전의 경로를 인자로 받습니다.
KomoranResult analyze(String sentence)
입력 문장에 대한 형태소 분석을 수행합니다. 입력 문장에 대한 형태소 분석 결과를 KomoranResult 객체로 반환합니다.
void analyzeTextFile(String inputFilename, String outputFilename, int thread)
파일 단위로 형태소 분석을 수행합니다. 형태소 분석이 필요한 파일의 경로, 형태소 분석 결과가 출력될 파일의 경로, 분석 시 사용할 쓰레드 수를 인자로 받습니다.
List<KomoranResult> analyze(List<String> sentences, int thread)
여러 문장에 대한 형태소 분석을 수행합니다. 분석할 문장의 List, 분석 시 사용할 쓰레드 수를 인자로 받습니다. 분석된 결과는 List<KomoranResult>로 반환됩니다.
List<KomoranResult> analyze(String sentence, int nbest)
입력 문장에 대한 형태소 분석 결과 중 n-best를 제공합니다. 분석할 문장, n-best를 인자로 받습니다. n-best 만큼의 형태소 분석 결과를 List<KomoranResult>로 반환합니다.
KomoranResult¶
List<LatticeNode> getResultNodeList()
형태소분석 결과를 List<LatticeNode> 형태로 반환합니다.
public List<String> getNouns()
형태소 분석 결과 중 명사류를 List<String> 형태로 반환합니다.
public List<String> getMorphesByTags(String... str)
형태소 분석 결과 중 특정 품사에 해당하는 형태소만 반환합니다.
public List<String> getMorphesByTags(Collection<String> targetPosCollection)
형태소 분석 결과 중 특정 품사에 해당하는 형태소만 반환합니다.
public String getPlainText()
형태소 분석 결과를 plain text형태의 string으로 반환합니다.
public List<Token> getTokenList()
형태소 분석 결과를 List<Token> 형태로 반환합니다. Token에는 형태소, 품사, 시작 위치, 끝나는 위치 등의 정보를 포함하고 있습니다.
public List<Pair<String, String>> getList()
형태소 분석 결과를 형태소, 품사 Pair의 리스트 형태로 반환합니다.
CorpusBuilder¶
public void save(String savePathName)
빌드한 코퍼스를 savePathName 경로에 저장합니다. savePathName 밑에 dic.irregular
, dic.word
, grammar.in
파일이 저장됩니다.
public void load(String loadPath)
빌드된 코퍼스를 load 합니다. loadPath 디렉토리 아래에는 save를 통해 생성된 dic.irregular
, dic.word
, grammar.in
파일이 있어야합니다.
public void buildPath(String corporaPath)
corporaPath 밑에 있는 모든 파일을 빌드합니다. 서브디렉토리에 있는 모든 파일들을 대상으로 합니다.
public void buildPath(String corporaPath, String suffix)
corporaPath 밑에 있는 모든 파일 중 파일 확장자가 suffix로 끝나는 파일들만 빌드합니다.
public void build(String filename)
filename에 해당하는 파일을 빌드합니다.
public void appendUserDic(String filename)
filename에 해당하는 사용자 사전을 추가하여 코퍼스 빌드 시 함께 빌드됩니다.
public void appendUserDicPath(String path, String suffix)
path 밑에 있는 모든 파일 중 확장자가 suffix로 끝나는 파일들만 사용자 사전으로 추가하여 코퍼스 빌드 시 함께 빌드됩니다.
ModelBuilder¶
public void setExternalDic(String externalDic)
본 메소드는 반드시 buildPath 메소드 호출 전에만 사용가능합니다.
externalDic 경로에 있는 외부 사전을 추가하여 모델을 빌드합니다. 외부 사전에 등록된 단어들의 빈도수는 50으로 초기화되어 모델에 반영됩니다.
public void buildPath(String path)
입력된 path 디렉토리 내 저장된 파일로부터 model을 빌드합니다. path 내에는 dic.word
, dic.irregular
, grammar.in
파일이 포함되어 있어야 합니다.
public void save(String path)
본 메소드 호출 전에 반드시 buildPath 메소드를 실행해야 합니다
빌드된 모델을 path 디렉토리에 저장합니다. path 디렉토리에는 irregular.model
, observation.model
, pos.table
, transition.model
파일이 생성됩니다.
Python API¶
본 문서에서는 Komoran에서 제공되는 다양한 Python API 들에 대해서 살펴봅니다.
사용자 사전 사용¶
Function¶
- 문장 내에서 사용자 사전에 포함된
단어
가 출현하면 사용자 사전에 정의된 품사를 우선적으로 갖게 됩니다. - 주로 사람이름, 영화제목, 브랜드명, 지명 등과 같이 고유명사를 인식하는데 활용할 수 있습니다.
- 기분석 사전보다 우선 순위가 낮습니다.
Code Example¶
//KOMORAN에서 기본으로 제공되는 LIGHT 모델 사용
Komoran komoran = new Komoran(DEFAULT_MODEL.LIGHT);
//사용자 사전 적용. 원하는 위치에 사용자 사전 파일을 생성한 후 경로만 지정해주면 됩니다.
komoran.setUserDic("user_data/dic.user");
File Format¶
- 사용자 사전의 포맷은
[단어] [\t] [품사]
로 구성되어 있어야합니다. - 단어는 아래 예제의 "바람과 함께 사라지다"와 같이 띄어쓰기가 허용됩니다.
- 형태소의 품사를 적지 않으면 기본적으로 고유명사(NNP)로 인지합니다.
- 라인의 시작에
#
으로 주석 처리가 가능합니다.
바람과 함께 사라지다 NNG
바람과 함께 NNP
#자연어 NNG
기분석 사전 사용¶
Function¶
- 문장 내에서 기분석 사전에 포함된
어절
이 출현하면 기분석 사전에 정의된 분석 결과대로 분석합니다. - 주로 사용자 사전 추가 및 확률 튜닝으로도 원하는 분석 결과가 나오지 않을 때 사용합니다.
- 사용자 사전보다 우선순위가 높습니다.
Caution¶
#잘못 된 예
감기는 감/NNG 기/ETM 는/JKG
Code Example¶
//KOMORAN에서 기본으로 제공되는 LIGHT 모델 사용
Komoran komoran = new Komoran(DEFAULT_MODEL.LIGHT);
//기분석 사전 적용. 원하는 위치에 기분석 사전 파일을 생성한 후 경로만 지정해주면 됩니다.
komoran.setFWDic("user_data/fwd.user");
File Format¶
[분석대상어절] [\t] [형태소1/품사1] [ ] [형태소2/품사2] [ ]...
로
구성되어 있어야 합니다.#
를 사용하여 주석처리가
가능합니다.감기는 감/NNG 기는/NNG
바랬어요 바라었/NP
흘렸어요 흘리/VV 었/EP 어요/EC
#바람과 바람/NNG
자주 묻는 질문¶
본 페이지에서는 KOMORAN과 관련하여 자주 문의가 들어오는 내용들을 정리하였습니다.
기본으로 제공되는 LIGHT 모델과 FULL 모델의 차이가 뭔가요?¶
- LIGHT 모델은 일반적으로 사용되는 문장들을 학습한 모델로 다양한 분야에서 사용하실 수 있는 기본 모델입니다.
- FULL 모델은 LIGHT 모델에 위키피디아의 타이틀을 NNP(고유명사)로 포함해서 학습한 것입니다. 그러므로 LIGHT 모델보다 상대적으로 용량이 큽니다.
- 형태소 분석기의 결과가 그대로 서비스에 노출되는 어플리케이션(연관 검색어, 색인어 추출, 단어 추출, 자동 완성 등)이 아니라면
LIGHT 모델을 권장
합니다.
setFWDDic과 setUserDic은 무엇인가요?¶
setFWDDic
은 기분석 사전을 형태소 분석기에 로드하는 메소드입니다. 기분석 사전은 일종의cache
입니다. 입력된 문장 내에서 기분석 사전에 포함된 어절이 있다면 형태소 분석 단계를 거치지 않고 기분석 사전의 결과대로 분석됩니다.setUserDic
은 사용자 사전을 형태소 분석기에 로드하는 메소드입니다. 사용자 사전에 포함된 단어들은 형태소 분석 단계에서 가장 높은 우선 순위를 갖습니다. 사이드 이펙트가 발생할 수 있으니 주의하여 사용해야 합니다.
[1] | 한국어 형태소 분석기를 뜻하는 KOrean MORphical ANalyzer의 약자입니다. |