API.js

/**
 * KoalaNLP가 지원하는 패키지의 목록을 키값으로 가지고 있습니다.
 *
 * * **주의** API를 import한다고 하여 자동으로 초기화가 되지 않으니 꼭 {@link module:koalanlp/Util.initialize}를 실행하시기 바랍니다.
 *
 * @module koalanlp/API
 * @example
 * import * as API from 'koalanlp/API';
 * **/

import {JVM} from './jvm';

/**
 * @public
 * @typedef {string} API
 */

/**
 * 한나눔.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-hnn.svg?style=flat-square&label=r"/> 버전이 최신입니다. 문장분리, 품사분석, 구문분석, 의존분석이 가능합니다.
 * @type API
 * @example
 * import {HNN} from 'koalanlp/API';
 */
export const HNN = 'hnn';


/**
 * 코모란.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-kmr.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석만 가능합니다.
 * @type API
 * @example
 * import {KMR} from 'koalanlp/API';
 */
export const KMR = 'kmr';


/**
 * 꼬꼬마.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-kkma.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석, 의존분석만 가능합니다.
 * @type API
 * @example
 * import {KKMA} from 'koalanlp/API';
 */
export const KKMA = 'kkma';


/**
 * 은전한닢.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-eunjeon.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석만 가능합니다.
 * @type API
 * @example
 * import {EUNJEON} from 'koalanlp/API';
 */
export const EUNJEON = 'eunjeon';


/**
 * 아리랑.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-arirang.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석만 가능합니다.
 * @type API
 * @example
 * import {ARIRANG} from 'koalanlp/API';
 */
export const ARIRANG = 'arirang';


/**
 * 라이노.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-rhino.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석만 가능합니다.
 * @type API
 * @example
 * import {RHINO} from 'koalanlp/API';
 */
export const RHINO = 'rhino';


/**
 * 트위터.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-okt.svg?style=flat-square&label=r"/> 버전이 최신입니다. 문장분리, 품사분석만 가능합니다.
 * @type API
 * @example
 * import {OKT} from 'koalanlp/API';
 */
export const OKT = 'okt';


/**
 * 다온.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-daon.svg?style=flat-square&label=r"/> 버전이 최신입니다. 품사분석만 가능합니다.
 * @type API
 * @example
 * import {DAON} from 'koalanlp/API';
 */
export const DAON = 'daon';


/**
 * ETRI Open API.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-etri.svg?style=flat-square&label=r"/> 버전이 최신입니다.
 * @type API
 * @example
 * import {ETRI} from 'koalanlp/API';
 */
export const ETRI = 'etri';


/**
 * Kakao Khaiii (Experimental)
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-khaiii.svg?style=flat-square&label=r"/> 버전이 최신입니다.
 *
 * **(참고)**
 * - 이 기능은 현재 실험적인 기능입니다.
 * - Khaiii는 C++로 개발되어 별도 설치가 필요합니다. [Khaiii](https://github.com/kakao/khaiii) 공식 홈페이지에서 설치법을 확인하시고, 설치하시면 됩니다.
 *
 * @type API
 * @example
 * import {KHAIII} from 'koalanlp/API';
 */
export const KHAIII = 'khaiii';


/**
 * UTagger (Experimental)
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-utagger.svg?style=flat-square&label=r"/> 버전이 최신입니다.
 *
 * **(참고)**
 * - 이 기능은 현재 실험적인 기능입니다.
 * - UTagger는 C로 개발되어 별도 설치가 필요합니다. [UTagger install](https://koalanlp.github.io/usage/Install-UTagger.md)에서 설치법을 확인하시고, 설치하시면 됩니다.
 *
 * @type API
 * @example
 * import {UTAGGER} from 'koalanlp/API';
 */
export const UTAGGER = 'utagger';


/**
 * 분석기 Interface 정의 라이브러리.
 * 현재 <img src="https://img.shields.io/maven-central/v/kr.bydelta/koalanlp-core.svg?style=flat-square&label=r"/> 버전이 최신입니다. 편의기능을 제공하며 타 분석기 참조시 함께 참조됩니다.
 * @type API
 * @example
 * import {CORE} from 'koalanlp/API';
 */
export const CORE = 'core';


/**
 * 'assembly' classifier 필요 여부
 * @private
 */
export const PACKAGE_REQUIRE_ASSEMBLY = [HNN, KKMA, ARIRANG, RHINO, DAON];


/**
 * 해당 API가 분석기를 지원하는지 확인함.
 * @param {!API} api 분석기 API
 * @param {!string} type 분석기 유형
 * @returns {Object} 지원한다면 해당 분석기 Java 클래스.
 * @private
 */
export function query(api, type) {
    try {
        return JVM.koalaClassOf(api, type);
    } catch (e) {
        throw Error(`API.${api}에서 ${type}을 불러오는 데 실패했습니다! ${type}이 없거나, 다운로드가 완전하지 않았을 수 있습니다. Cause: ${e}`);
    }
}


/**
 * API의 패키지 이름 반환
 * @param {string} api 분석기 API
 * @return {string} 패키지 이름 접미사
 * @private
 */
export function getPackage(api) {
    return api.toLowerCase();
}