Skip to content
This repository has been archived by the owner on Apr 15, 2020. It is now read-only.

Commit

Permalink
Merge pull request #34 from shineware/1.0
Browse files Browse the repository at this point in the history
KOMORAN Admin v1.0
  • Loading branch information
9bow authored Sep 20, 2019
2 parents 122fc7f + 8df3ff4 commit 24fb03b
Show file tree
Hide file tree
Showing 25 changed files with 565 additions and 424 deletions.
97 changes: 97 additions & 0 deletions FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# 자주 묻는 질문과 답변 (FAQ)

## 형태소 분석기 관련 FAQ

* **질문(이하 Q)**: KOMORAN은 무엇인가요?
* **답변(이하 A)**: [KOMORAN](https://github.com/shin285/KOMORAN)[신준수](https://github.com/shin285)님께서 [2013년](https://shineware.tistory.com/entry/KOMORAN-ver-05-자바-한글-형태소-분석기)부터 개발해온 한국어 형태소 분석기입니다. 더 자세한 내용은 [홈페이지](https://www.shineware.co.kr/products/komoran/?utm_source=komoran-admin&utm_medium=Referral&utm_campaign=admin-github)를 참고해주세요.

* **Q**: KOMORAN 외에 다른 형태소 분석기도 사용할 수 있나요?
* **A**: KOMORAN 관리도구는 KOMORAN을 위해 개발되어 다른 형태소 분석기에서는 사용이 어렵습니다. 하지만, 사전의 형태가 동일하다면 사전 보정을 위해서는 사용할 수 있습니다.

## 사전 관련 FAQ

* **Q**: 사전 데이터는 어디에 저장되나요?
* **A**: 사전 데이터는 H2 Database에 저장되며, AdminDB.mv.db라는 파일로 존재합니다. SQL을 사용할 줄 아신다면 [H2 콘솔](http://localhost:3579/console)에서도 살펴보실 수 있습니다.

* **Q**: 사전 데이터를 파일로 받고 싶어요.
* **A**: 개별 사전을 파일 형태로 다운로드 받으시려면 각 사전 보정 메뉴 상단의 '내려받기'를 이용해주세요.

* **Q**: 형태소 분석 결과 비교를 위해 임시로 일부 단어를 사전에서 제외하고 싶습니다. 삭제 / 등록 외에 방법이 있나요?
* **A**: 사용자 사전과 기분석 사전은 단어가 `#` 문자로 시작하는 경우 해당 단어를 형태소 분석 시에 인식하지 않습니다. 단어 빈도와 품사 빈도에서는 사용할 수 없는 기능이니 참고해주세요.

* **Q**: 사전 파일들은 어떤 형식으로 되어 있나요?
* **A**: 각 사전 파일들의 형식은 다음과 같습니다.

| 사전명 | 파일 규칙 | 예시(행) | 예시(파일) | 비고 |
| ------------------------ | ------------------------------------ | ------------------------------- | ------------------------------------------------------------------------------------ | ----------------------------- |
| 단어 빈도 (`dic.word`) | `단어\t품사:빈도` | `감사원 NNG:40` | [예시 파일](https://github.com/shin285/KOMORAN/blob/master/corpus_build/dic.word) | - |
| 품사 빈도 (`grammar.in`) | `이전품사\t다음품사1:빈도,다음품사2:빈도,...` | `VCN EF:1874,EP:785,EC:4037` | [예시 파일](https://github.com/shin285/KOMORAN/blob/master/corpus_build/grammar.in) | - |
| 사용자 사전 (`dic.user`) | `단어\t품사` | `바람과 함께 NNG` | [예시 파일](https://github.com/shin285/KOMORAN/blob/master/user_data/dic.user) | 단어가 `#`으로 시작 시 무시함 |
| 기분석 사전 (`fwd.user`) | `기분석어절\t형태소1/품사1 형태소2/품사2 ...` | `감기는 감/NNG 기는/NNG` | [예시 파일](https://github.com/shin285/KOMORAN/blob/master/user_data/fwd.user) | 기분석 어절이 `#`으로 시작 시 무시함 |

## 품사 관련 FAQ

* **Q**: 품사의 종류는 어떻게 되나요? 어떤 품사들을 사용하나요?
* **A**: KOMORAN 형태소 분석기와 KOMORAN 관리도구는 `21세기 세종계획`의 품사 기준을 따르고 있습니다. 개별 품사들의 목록은 [KOMORAN 문서](http://docs.komoran.kr/?utm_source=komoran-admin&utm_medium=Referral&utm_campaign=admin-github)[품사표(PoS Table)](http://docs.komoran.kr/firststep/postypes.html?utm_source=komoran-admin&utm_medium=Referral&utm_campaign=admin-github)을 참고해주세요.

* **Q**: 품사 빈도에는 품사표에 없는 품사가 있습니다. 어떤 품사인가요?
* **A**: 품사 빈도에는 품사표에 존재하는 품사들 외에 어절의 시작(`BOE`)과 끝(`EOE`)을 표시하는 별도의 품사가 존재합니다.

## 모델 관련 FAQ

* **Q**: 모델은 어디에 저장되나요?
* **A**: 프로젝트 디렉토리 바로 아래에 `models/`라는 이름의 디렉토리 아래에 저장됩니다. 각 하위 디렉토리 하나가 모델 하나를 포함하고 있으며, 디렉토리명이 모델의 생성 시각입니다.

* **Q**: 모델 디렉토리에는 어떤 내용들이 포함되어 있나요?
* **A**: 모델 디렉토리 내에는 2개의 디렉토리(`corpus_build/`, `model/`)와 2개의 파일(`dic.user`, `fwd.user`)이 존재합니다. 각 내용은 다음과 같습니다.

```sh
.
├── corpus_build # 사용자 모델을 생성하기 위한 기초 데이터
│   ├── dic.irregular # 불규칙 사전
│   ├── dic.word # 단어 빈도 사전
│   └── grammar.in # 품사 빈도 사전
├── dic.user # 사용자 단어 사전
├── fwd.user # 기분석 사전
└── model # 위 corpus_build/ 디렉토리 내의 데이터로 생성한 사용자 모델
├── irregular.model
├── observation.model
├── pos.table
└── transition.model
````

* **Q**: 모델 생성 시 사전을 확인하라는 메시지와 함께 모델 생성이 실패합니다.
* **A**: 모델 생성 시 실패 원인은 사전 데이터에 있을 확률이 높습니다. 특히 품사 사전에 빠트린 품사 쌍이 있는지 확인해주세요.

## 기타 사용 관련 FAQ

* **Q**: 모델 생성 시간이 다르게 표시됩니다.
* **A**: 모델 생성 시의 시간은 시스템 시간을 사용합니다. 모델 생성 시간이 다르게 표시된다면 KOMORAN 관리도구가 실행 중인 시스템의 시간을 확인해주세요.

## 실행 환경 및 설정 관련 FAQ

* **Q**: 다른 컴퓨터에서도 KOMORAN 관리도구에 접근할 수 있게 하고 싶습니다.
* **A**: application.yaml 파일의 2번째줄의 `address: 127.0.0.1``address: 0.0.0.0`으로 변경하면 외부에서도 접속이 가능합니다.

* **Q**: Oracle JDK 외에 다른 JDK도 지원하나요?
* **A**: 네, Oracle Java 1.8 외에 OpenJDK 1.8에서도 정상적으로 실행이 가능한 것을 확인하였습니다. 만약 사용 중 문제가 발생한다면 이슈를 남겨주세요.

* **Q**: 최신 버전의 Java도 지원하나요?
* **A**: 2019년 9월 현재 Oracle Java 12에서 정상적으로 실행이 가능한 것을 확인하였습니다. 만약 사용 중 문제가 발생한다면 이슈를 남겨주세요.

* **Q**: 1GB 이하의 적은 메모리에서도 사용이 가능한가요?
* **A**: 다음과 같이 설정하여 512MB의 가용 메모리에서 실행 가능한 것을 확인하였습니다. (단, Gradle Daemon은 별도입니다.)

* **Q**: 메모리가 부족하여 메모리 사용량을 512MB로 제한하고 싶습니다.
* **A**: gralde.properties 파일의 첫 번째 줄의 설정을 다음과 같이 변경해주세요. `org.gradle.jvmargs=-Xmx256m -Xmx3g -XX:MaxPermSize=256m -Dfile.encoding=UTF-8`

## KOMORAN 관리도구 활용 관련 FAQ

* **Q**: KOMORAN 관리도구를 회사에서 사용하고 싶습니다.
* **A**: KOMORAN 관리도구는 Apache License 2.0으로 배포되고 있습니다. 따라서 절차 없이 영리 또는 비영리 목적으로 사용하실 수 있습니다.

* **Q**: KOMORAN 관리도구의 소스코드를 변경하였습니다. 반드시 공개해야 하나요?
* **A**: 변경한 코드는 공개하지 않으셔도 됩니다. 하지만 다른 분들께도 필요한 내용이라면 [Pull Request](https://github.com/shineware/KOMORANAdmin/pulls)를 보내주시기를 부탁드립니다.

* **Q**: KOMORAN 관리도구를 개선하는데 기여하고 싶습니다.
* **A**: 감사합니다! KOMORAN 관리도구 저장소에 [Pull Request](https://github.com/shineware/KOMORANAdmin/pulls)를 보내주세요.
66 changes: 55 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,41 @@
## 소개

* KOMORAN 관리도구는 [한국어 형태소 분석기 KOMORAN](https://github.com/shin285/KOMORAN)의 사용을 돕기 위한 도구입니다.
* KOMORAN 사용자 모델을 만드는데 필요한 사전들을 관리하고, 해당 사전들을 적용한 사용자 모델을 만들 수 있습니다.
* KOMORAN의 사용자 모델을 만드는데 필요한 사전들을 관리하고, 해당 사전들이 적용된 사용자 모델을 만들고 적용 방법을 알 수 있습니다.

## 주요 기능

### 메뉴 소개

KOMORAN 관리도구는 크게 4가지 기능을 제공하는 메뉴들로 구성되어 있습니다.

* 분석
* KOMORAN 기본 모델(`LIGHT`)로 형태소 분석을 할 수 있습니다.
* 조정
* 보정
* 사용자 모델을 만드는데 필요한 사전들을 관리합니다.
* 비교
* 사용자 모델을 생성하고, 기본 모델과 생성한 모델들 중 2가지를 선택하여 형태소 분석 결과를 비교할 수 있습니다.
* 배포
* 사용자 모델을 생성 / 삭제할 수 있으며, 사용자 모델을 배포할 수 있는 방법을 안내합니다.

### 화면 소개

각 메뉴들은 다음과 같은 화면들로 구성되어 있습니다.

| 분석 메뉴 | 보정 메뉴 |
| --------- | --------- |
| ![분석 메뉴](https://raw.githubusercontent.com/shineware/KOMORANAdmin/master/src/main/resources/static/demo/ScreenShot01_Analyze.png) | ![보정 메뉴](https://raw.githubusercontent.com/shineware/KOMORANAdmin/master/src/main/resources/static/demo/ScreenShot02_ManageDict.png) |

| 비교 메뉴 | 배포 메뉴 |
| --------- | --------- |
| ![비교 메뉴](https://raw.githubusercontent.com/shineware/KOMORANAdmin/master/src/main/resources/static/demo/ScreenShot03_CompareResults.png) | ![배포 메뉴](https://raw.githubusercontent.com/shineware/KOMORANAdmin/master/src/main/resources/static/demo/ScreenShot04_DeployModel.png) |

## 설치 및 실행

### 필요 환경

* Java 1.8 이상
* `java -version` 으로 버전 확인이 가능합니다.
* `java -version` 명령어로 현재 버전을 확인할 수 있습니다.
* Chrome 브라우저
* 최신 버전의 Safari, Firefox 등에서도 동작합니다.

Expand All @@ -32,25 +46,55 @@ KOMORAN 관리도구는 크게 4가지 기능을 제공하는 메뉴들로 구
* 아래와 같이 Git을 이용하여 KOMORAN 관리도구를 복제합니다.
* 또는 [배포 메뉴](https://github.com/shineware/KOMORANAdmin/releases)에서 최신 소스코드를 다운로드 받을 수 있습니다.

```sh
```sh
git clone https://github.com/shineware/KOMORANAdmin
```
```

### 실행 방법

* 위에서 복제 또는 다운로드받은 소스 코드가 위치하는 디렉토리로 이동합니다.

```sh
```sh
cd KOMORANAdmin
```
```

* KOMORAN 관리도구를 실행합니다.
* (처음 실행 시에는 필요한 라이브러리들을 내려받는데 다소 시간이 소요됩니다.)

```sh
```sh
# macOS 및 Linux 사용 시 아래와 같이 실행합니다.
./gradlew bootRun
# Windows 사용 시 아래와 같이 실행합니다.
gradlew.bat bootRun
```

* Chrome 브라우저를 열고 [http://localhost:8888/](http://localhost:8888/) 에 접속합니다.
# 실행이 완료되면 아래와 같은 메시지가 출력됩니다.
# ##### KOMORAN Admin has just started. #####
```

* Chrome 브라우저를 열고 [http://localhost:3579/](http://localhost:3579/) 에 접속합니다.

## 자주 묻는 질문과 답변

* [자주 묻는 질문과 답변](https://github.com/shineware/KOMORANAdmin/blob/master/FAQ.md) 문서를 참조해주세요.

## 기여

* KOMORAN 관리도구와 관련한 소스 코드나 버그 리포트, 오타 수정 등 어떠한 기여도 환영합니다.
* 저장소에 [이슈](https://github.com/shineware/KOMORANAdmin/issues)를 남겨주시거나, [Pull Request](https://github.com/shineware/KOMORANAdmin/pulls)를 보내주세요.
* [KOMORAN Slack](https://komoran.slack.com/) 또한 열려있습니다. ([초대 링크](http://goo.gl/T1d3Ia))
* 단, 기여해주신 모든 내용은 [Apache License 2.0](https://github.com/shineware/KOMORANAdmin/blob/master/LICENSE)으로 공개되므로, 이에 동의하시는 경우에만 참여해주시기 바랍니다.

## 라이선스

* KOMORAN 및 KOMORAN 관리도구는 [Apache License 2.0](https://github.com/shineware/KOMORANAdmin/blob/master/LICENSE)을 따릅니다.
* 누구든 KOMORAN 관리도구의 일부 또는 전체를 개인적 또는 상업적 목적으로 사용할 수 있습니다.
* SHINEWARE 및 이 저장소의 기여자(들)은 KOMORAN 관리도구를 사용하는 것에 대해 어떠한 권리도 주장하지 않습니다.
* SHINEWARE 및 이 저장소의 기여자(들)은 KOMORAN 관리도구를 사용함에 따라 발생하는 어떠한 책임도 지지 않습니다.
* 단, KOMORAN 관리도구에서 사용한 아래 라이브러리들은 각자의 라이선스를 따릅니다.
* [Tabulator 3.5](https://github.com/olifolkerd/tabulator/blob/3.5/LICENSE) ([MIT License](https://opensource.org/licenses/MIT))
* [AdminLTE 2.4.2 및 이에 포함된 라이브러리들](https://adminlte.io/docs/2.4/license) ([MIT License](https://opensource.org/licenses/MIT))
* [Spring Boot 2.1.2 및 이에 포함된 라이브러리들](https://github.com/spring-projects/spring-boot/blob/2.1.x/LICENSE.txt) ([Apache License 2.0](https://opensource.org/licenses/Apache-2.0))
* [json-simple 1.1.1](https://code.google.com/archive/p/json-simple/) ([Apache License 2.0](https://opensource.org/licenses/Apache-2.0))
* [java-diff-utils 4.0](https://github.com/java-diff-utils/java-diff-utils/blob/java-diff-utils-4.0/LICENSE) ([Apache License 2.0](https://opensource.org/licenses/Apache-2.0))
* [Zip4j 2.1.3](https://github.com/srikanth-lingala/zip4j/blob/v2.1.3/LICENSE) ([Apache License 2.0](https://opensource.org/licenses/Apache-2.0))
* [Java Hamcrest 1.3](https://github.com/hamcrest/JavaHamcrest/blob/hamcrest-java-1.3/LICENSE.txt) ([BSD License](https://opensource.org/licenses/BSD-3-Clause))
* [H2 Database](https://www.h2database.com/html/license.html) ([Mozilla Public License 2.0](https://opensource.org/licenses/MPL-2.0) / [Eclipse Public License 1.0](https://opensource.org/licenses/eclipse-1.0.php))
15 changes: 7 additions & 8 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,24 @@ apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'kr.co.shineware.nlp.komoran'
version = '0.0.1-SNAPSHOT'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'

compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"

configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

repositories {
mavenCentral()
maven { url "https://jitpack.io" }
flatDir {
dirs 'libs'
}
}

dependencies {
// use local version instead of mvn
// related issue shineware/KOMORANAdmin#14 & shin285/KOMORAN#56
// compile 'com.github.shin285:KOMORAN:master-SNAPSHOT'
compile name: 'KOMORAN-6c5ba25'
// use latest KOMORAN
compile 'com.github.shin285:KOMORAN:master-SNAPSHOT'

compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
Expand All @@ -51,3 +49,4 @@ dependencies {
testCompile 'org.springframework.boot:spring-boot-starter-test'
testCompile 'org.hamcrest:hamcrest-all:1.3'
}

2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
org.gradle.jvmargs=-Dfile.encoding=UTF-8
systemProp.file.encoding=UTF-8
Binary file removed libs/KOMORAN-6c5ba25.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class KOMORANAdminApplication {

public static void main(String[] args) {
SpringApplication.run(KOMORANAdminApplication.class, args);
logger.info("##### KOMORAN Admin has just started! #####");
}

@Bean("threadPoolTaskExecutor")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ public CustomH2Dialect() {
super();
this.registerFunction("GROUP_CONCAT", new StandardSQLFunction("group_concat", StringType.INSTANCE));
this.registerFunction("CONCAT", new StandardSQLFunction("concat", StringType.INSTANCE));
logger.info("CustomFunctions have been registered");
logger.debug("CustomFunctions have been registered");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ public void run(ApplicationArguments args) throws IOException {

// Initialize DicWord
if (dicWordRepository.count() <= 0 && getDefaultFilePath("dicword") != null) {
logger.info("Importing DicWord from file named " + filenameDicWord);
logger.debug("Importing DicWord from file named " + filenameDicWord);
dicWordService.importFromFile(getDefaultFilePath("dicword"));
}

// Initialize GrammarIn
if (grammarInRepository.count() <= 0 && getDefaultFilePath("grammarin") != null) {
logger.info("Importing GrammarIn from file named " + filenameGrammarIn);
logger.debug("Importing GrammarIn from file named " + filenameGrammarIn);
grammarInService.importFromFile(getDefaultFilePath("grammarin"));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ public ArrayList<HashMap<String, String>> parse(Map<String, String> inputParam)
// Sort by '_order' key
Collections.sort(this.parsedResults, new OrderKeyComparator());

logger.info("Parsed Result: " + this.parsedResults.toString());
logger.debug("Parsed Result: " + this.parsedResults.toString());

return this.parsedResults;
}

class OrderKeyComparator implements Comparator<HashMap<String, String>> {
@Override
public int compare(HashMap<String, String> objOne, HashMap<String, String> objAnother) {
return (new Integer(objOne.get("_order"))).compareTo(new Integer(objAnother.get("_order")));
return (Integer.valueOf(objOne.get("_order"))).compareTo(Integer.valueOf(objAnother.get("_order")));
}
}
}
8 changes: 5 additions & 3 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
server:
port: 8888
address: 127.0.0.1
port: 3579


spring:
Expand Down Expand Up @@ -58,6 +59,7 @@ models:

logging:
level:
kr.co.shineware.nlp.komoran.admin: TRACE
org.springframework: DEBUG
kr.co.shineware.nlp.komoran.admin.*: INFO
org.springframework: ERROR
org.hibernate: ERROR
com.zaxxer.hikari.*: ERROR
Binary file removed src/main/resources/static/demo/DictAdminDemo-Add.gif
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 24fb03b

Please sign in to comment.