목차로 이동


목차

개체명 인식하기

문장 또는 문단을 분석해서 각 문장 속에서 사람이나 장소 등을 나타내는 개체명을 묶어낼 수 있습니다. ETRI 분석기만 의존구조 분석을 지원합니다.

결과물은 Sentence 객체에 포함된 RoleEdge의 List가 됩니다.

아래 분석 예시는 ‘텍스트 문단’ 을 기준으로 분석한 결과들입니다. 이미 타 분석기에서 분석된 Sentence 객체나, Sentence의 List인 경우에도 같은 방식으로 호출이 가능합니다.

참고

의미역 결정은 문장의 구성 어절들의 역할/기능을 분석하는 방법입니다.

예) ‘나는 밥을 어제 집에서 먹었다’라는 문장에는 동사 ‘먹었다’를 중심으로

Kotlin

Reference: CanLabelSemanticRole, ETRI RoleLabeler

import kr.bydelta.koala.etri.RoleLabeler

val API_KEY = /** ETRI에서 발급받은 키 **/
val labeler = RoleLabeler(API_KEY)

val parsed = labeler.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.") 
// 또는 labeler(...), labeler.invoke(...)

// 첫번째 문장의 의미역들을 출력합니다.
parsed[0].getRoles().forEach{ role ->
    println(role)
}

Scala

Reference: CanLabelSemanticRole, ETRI RoleLabeler

import kr.bydelta.koala.etri.EntityRecognizer
import kr.bydelta.koala.Implicits._

val API_KEY = /** ETRI에서 발급받은 키 **/
val labeler = new RoleLabeler(API_KEY)

val parsed = labeler.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.") 
// 또는 labeler(...), labeler.invoke(...)

// 첫번째 문장의 의미역들을 출력합니다.
parsed[0].getRoles().forEach{ role =>
    println(role)
}

Java

Reference: CanLabelSemanticRole, ETRI RoleLabeler

import kr.bydelta.koala.etri.RoleLabeler;
import kr.bydelta.koala.data.Sentence;
import kr.bydelta.koala.data.RoleEdge;

String API_KEY = /** ETRI에서 발급받은 키 **/
RoleLabeler labeler = new RoleLabeler(API_KEY);

List<Sentence> parsed = labeler.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.") 
// 또는 labeler.invoke(...)

// 첫번째 문장의 의미역들을 출력합니다.
for(RoleEdge role : parsed[0].getRoles()) {
    println(role);
}

JavaScript

Reference: RoleLabeler

Async/Await
const {RoleLabeler} = require('koalanlp/proc');
const {ETRI} = require('koalanlp/API');

const API_KEY =; ??/** ETRI에서 발급받은 키 **/

async function someAsyncFunction(){
    // ....
    
    let labeler = new RoleLabeler(ETRI, {etriKey: API_KEY});
    let result = await labeler("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.");
    // 또는 labeler.analyze(...)

    /* Result는 Sentence[] 타입입니다. */
    for(const role of result[0].getRoles()){
        console.log(role.toString()); // 첫번째 문장의 의미역들을 출력합니다.
    }
        
    // ...
}

someAsyncFunction().then(
    () => console.log('After function finished'),
    (error) => console.error('Error occurred!', error)
);
Promise
const {RoleLabeler} = require('koalanlp/proc');
const {ETRI} = require('koalanlp/API');

const API_KEY =; ??/** ETRI에서 발급받은 키 **/

let labeler = new RoleLabeler(ETRI, {etriKey: API_KEY});
labeler("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.")  // 또는 labeler.analyze(...)
    .then((result) => {
        /* Result는 Sentence[] 타입입니다. */
        for(const role of result[0].getRoles()){
            console.log(role.toString()); // 첫번째 문장의 의미역들을 출력합니다.
        }
    }, (error) => console.error('Error occurred!', error));
Synchronous Call
const {RoleLabeler} = require('koalanlp/proc');
const {ETRI} = require('koalanlp/API');

const API_KEY =; ??/** ETRI에서 발급받은 키 **/

// ....

let labeler = new RoleLabeler(ETRI, {etriKey: API_KEY});
let result = labeler.analyzeSync("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.");

/* Result는 Sentence[] 타입입니다. */
for(const role of result[0].getRoles()){
    console.log(role.toString()); // 첫번째 문장의 의미역들을 출력합니다.
}
        
// ...

Python 3

Reference: RoleLabeler

from koalanlp import API
from koalanlp.proc import EntityRecognizer

labeler = RoleLabeler(API.ETRI, etri_key=API_KEY)

parsed = labeler("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.")
# 또는 labeler.analyze(...), labeler.invoke(...)

# 첫번째 문장의 의미역들을 출력합니다.
for role in parsed[0].getRoles():
    print(role)

목차로 이동