아래를 눌러, @koalanlp가 관리하는 최신 버전의 저장소로 이동해주세요.
# NodeJS-KoalaNLP
한국어 형태소 및 구문 분석기의 모음인, KoalaNLP의 Javascript (Node.js) Wrapper입니다.
이 프로젝트는 서로 다른 형태의 형태소 분석기를 모아, 동일한 인터페이스 아래에서 사용할 수 있도록 하는 것이 목적입니다.
- Hannanum: KAIST의 한나눔 형태소 분석기와 NLP_HUB 구문분석기
- KKMA: 서울대의 꼬꼬마 형태소/구문 분석기
- KOMORAN: Junsoo Shin님의 코모란 v3.x
- Twitter: OpenKoreanText의 오픈 소스 한국어 처리기 (구 Twitter 한국어 분석기)1-1
- Eunjeon: 은전한닢 프로젝트의 SEunjeon(S은전)
- Arirang: 이수명님의 Arirang Morpheme Analyzer 1-2
- RHINO: 최석재님의 RHINO v2.5.4
주1-1 이전 코드와의 연속성을 위해서, OpenKoreanText의 패키지 명칭은 twitter로 유지합니다.
주1-2 Arirang 분석기의 출력을 형태소분석에 적합하게 조금 다듬었으므로, 원본과 약간 다른 결과를 낼 수도 있습니다.
KoalaNLP의 Contributor가 되고 싶으시다면, 언제든지 Issue에 등록해주십시오. 또한, 추가하고자 하는 새로운 프로젝트가 있으시면, Issue에 등록해주십시오.
API 문서는 에서, 간단한 사용법은 Wiki에서 확인하시면 됩니다.
Java8 이상이 설치되어 있어야 합니다.
아래와 같이 koalanlp를 추가해주세요.
$ npm install koalanlp --savekoalanlp는, node-java 및 node-java-maven 패키지의 도움을 받아, 필요한 java dependency를 자동으로 가져옵니다.
[참고] 최초 사용시 또는, 최신 패키지로 업데이트 되는 경우, dependency를 찾아오는 데 시간이 소요될 수 있습니다. 다운로드 진행 중에 취소하시면 다운로드 된 패키지가 corrupt 될 수 있습니다. 이 경우, Maven repository 저장 공간인 (
~/.m2) 폴더에서 오류가 나는 패키지를 삭제하시고 다시 시작하십시오.
다음과 같이 사용합니다. (ES2015 기준으로 작성되었으나, ES5 에서도 유사하게 작성하실 수 있습니다.)
let koalanlp = require('koalanlp'); // Import
let API = koalanlp.API; // Tagger/Parser Package 지정을 위한 목록
let POS = koalanlp.POS; // 품사 관련 utility
koalanlp.initialize({
packages: [API.EUNJEON, // 품사분석(POS Tagging)을 위해서, 은전한닢 사용
API.KKMA], // 의존구문분석(Dependency Parsing)을 위해서, 꼬꼬마 사용
version: "1.9.2", // 사용하는 KoalaNLP 버전 (1.9.2 사용)
javaOptions: ["-Xmx4g"],
debug: true // Debug output 출력여부
}).then(function(){
// 품사분석기 이용법
let tagger = new koalanlp.Tagger(API.EUNJEON);
// POS Tagging
tagger.tag("안녕하세요. 눈이 오는 설날 아침입니다.")
.catch(function(error){
console.error(error);
}).then(function(taggedAsync){
console.log("Async", taggedAsync.result.map(s => s.toString()).join("\n"));
});
// 의존구문분석기 이용법
let parser = new koalanlp.Parser(API.KKMA, API.EUNJEON);
// Dependency Parsing
parser.parse("안녕하세요. 눈이 오는 설날 아침입니다.")
.catch(function(error){
console.error(error);
}).then(function(parsed){
console.log("Async", parsed.result.map(s => s.toString()).join("\n"));
// Data classes
let sentence = parsed[1]; // 두번째 문장인, "눈이 오는 설날 아침입니다."를 선택합니다.
let wordAt0 = sentence.get(0); // 첫번째 어절을 선택해봅니다.
console.log(wordAt0.exists(m => POS.isPredicate(m.tag))); // 첫번째 어절에, 용언(동사/형용사)을 포함한 형태소가 있는지 확인합니다.
console.log(sentence.exists(w => w.exists(m => POS.isNoun(m.tag)))); // 문장 전체에 체언(명사 등)을 포함한 어절이 있는지 확인합니다.
console.log(sentence.nouns()); // 문장에서 체언만 추출합니다.
console.log(sentence.verbs()); // 문장에서 용언만 추출합니다.
});
});은전한닢(EUNJEON) |
꼬꼬마(KKMA) |
코모란(KOMORAN) |
한나눔(HANNANUM) |
오픈한글(TWITTER) |
아리랑(ARIRANG) |
라이노(RHINO) |
|
|---|---|---|---|---|---|---|---|
| 품사분석 | v1.4.0 | v2 | v3.3.3 | v1 | v2.1.2 | v1.1.3 | v2.5.4 |
| 의존구문분석 | 지원안함 | 가능 | 지원안함 | 가능 | 지원안함 | 지원안함 | 지원안함 |
이 프로젝트 자체(nodejs-KoalaNLP)와 인터페이스 통합을 위한 Java/Scala 코드는 MIT License을 따르며, 각 분석기의 License와 저작권은 각 프로젝트에서 지정한 바를 따릅니다.
- Hannanum: GPL v3
- KKMA: GPL v2 (GPL v2를 따르지 않더라도, 상업적 이용시 별도 협의 가능)
- KOMORAN: Apache License 2.0
- Twitter: Apache License 2.0
- Eunjeon: Apache License 2.0
- Arirang: Apache License 2.0
- RHINO: 비상업적 용도 사용가능.