-
Notifications
You must be signed in to change notification settings - Fork 10
2.5 여러 패키지의 교차 사용 (Mixed usage of packages)
Bugeun Kim edited this page Dec 14, 2018
·
6 revisions
여기에 수록된 사용법(1~3절)은 모두 1.x 버전의 사용법입니다. 최신 버전의 사용법은 Usage를 참고하십시오.
통합 인터페이스는 여러 패키지간의 호환이 가능하게 설계되어 있습니다. 이론적으로는 타 패키지의 품사 분석 결과를 토대로 구문 분석이 가능합니다.
Note:
- 본 분석의 결과는 검증되지 않았습니다.
- 신조어 등으로 인해 한나눔이나 꼬꼬마에서 품사 분석이 제대로 수행되지 않을 경우를 위한 기능입니다.
- 사용자 정의 사전은
Tagger와Parser의 대상이 되는 패키지에 모두에 추가하여야 합니다.
/*
* 예시에서는 트위터(API.TWITTER) 문장분석기, 은전한닢(API.EUNJEON) 품사 분석, 꼬꼬마(API.KKMA) 구문 분석을 진행함.
* intialize({packages: [API.TWITTER, API.EUNJEON, API.KKMA, ...], ...}) 와 같이 초기화되었다고 가정합니다.
*/
let koalanlp = require('koalanlp');
let API = koalanlp.API;
let SentenceSplitter = koalanlp.SentenceSplitter;
let Parser = koalanlp.Parser;
// 문장분석기는 트위터의 것을 초기화합니다.
let splitter = new SentenceSplitter(API.TWITTER);
// 의존구문분석기는, 은전한닢으로 품사분석을 하고, 꼬꼬마로 구문분석을 하도록 합니다.
let parser = new Parser(API.KKMA, API.EUNJEON);
// 분석할 문장
let paragraph = "안녕하세요. 눈이 오는 설날 아침입니다. KoalaNLP는 여러 분석기를 교차할 수 있어 편리합니다.";
// 개념 예시입니다. (실제 코드는 이와 다를 수 있습니다)
splitter.sentences(paragraph); // 먼저 문장으로 나눕니다.
.then(function(sentences){// 나눈 문장 각각을 품사 및 구문분석합니다.
return new Promise(function(resolve, reject){
finalData = [];
sentences.forEach(function(sent){
parser.parseSentence(sent)
.then(p => {
finalData.push(p);
if(sentences.length == finalData.length) resolve(finalData);
});
});
});
});
// Synchronous:
let sentences = splitter.sentencesSync(paragraph);
let analyzed = sentences.forEach(sent => parser.parseSync(sent));[참고] 아래와 같이 구성하고, 세 API를 거치도록 했을 경우에도 같은 결과를 돌려줍니다.
let Tagger = koalanlp.Tagger;
// 문장분석기는 트위터의 것을 초기화합니다.
let splitter = new SentenceSplitter(API.TWITTER);
// 은전한닢으로 품사분석을 합니다.
let tagger = new Tagger(API.EUNJEON);
// 의존구문분석기는, 꼬꼬마로 구문분석을 하도록 합니다.
let parser = new Parser(API.KKMA);