목차
구문 구조 분석하기
문장 또는 문단을 분석해서 각 문장의 구문구조를 묶어낼 수 있습니다. 한나눔 분석기만 구문구조 분석을 지원합니다.
결과물은 Sentence 객체에 포함된 SyntaxTree가 됩니다.
아래 분석 예시는 ‘텍스트 문단’ 을 기준으로 분석한 결과들입니다.
이미 타 분석기에서 분석된 Sentence 객체나, Sentence의 List인 경우에도 같은 방식으로 호출이 가능합니다.
참고
구문구조 분석은 문장의 구성요소들(어절, 구, 절)이 이루는 문법적 구조를 분석하는 방법입니다.
예) ‘나는 밥을 먹었고, 영희는 짐을 쌌다’라는 문장에는 2개의 절이 있습니다
- 나는 밥을 먹었고
- 영희는 짐을 쌌다
각 절은 3개의 구를 포함합니다
- 나는, 밥을, 영희는, 짐을: 체언구
- 먹었고, 쌌다: 용언구
Kotlin
Reference: CanParseSyntax, Parser
import kr.bydelta.koala.hnn.Parser
val parser = Parser()
val parsed = parser.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.")
// 또는 parser(...), parser.invoke(...)
println(parsed[0].getSyntaxTree().getTreeString()) // 첫번째 문장의 구문구조 트리를 출력합니다.
Scala
Reference: CanParseSyntax, Parser
- koalanlp-scala가 dependency로 포함되었다고 가정합니다.
import kr.bydelta.koala.hnn.Parser
import kr.bydelta.koala.Implicits._
val parser = new Parser()
val parsed = parser.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.")
// 또는 parser(...), parser.invoke(...)
println(parsed(0).getSyntaxTree().getTreeString()) // 첫번째 문장의 구문구조 트리를 출력합니다.
Java
Reference: CanParseSyntax, Parser
import kr.bydelta.koala.hnn.Parser;
import kr.bydelta.koala.data.Sentence;
Parser parser = new Parser();
List<Sentence> parsed = parser.analyze("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.");
// 또는 parser.invoke(...)
System.out.println(parsed.get(0).getSyntaxTree().getTreeString()); // 첫번째 문장의 구문구조 트리를 출력합니다.
JavaScript
Reference: Parser
- 아래 코드는 ES8과 호환되는 CommonJS (NodeJS > 8) 기준으로 작성되어 있습니다.
Async/Await
const {Parser} = require('koalanlp/proc');
const {HNN} = require('koalanlp/API');
async function someAsyncFunction(){
// ....
let parser = new Parser(HNN);
let result = await parser("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.");
// 또는 parser.analyze(...)
/* Result는 Sentence[] 타입입니다. */
console.log(result[0].getSyntaxTree().getTreeString()); // 첫번째 문장의 구문구조 트리를 출력합니다.
// ...
}
someAsyncFunction().then(
() => console.log('After function finished'),
(error) => console.error('Error occurred!', error)
);
Promise
const {Parser} = require('koalanlp/proc');
const {HNN} = require('koalanlp/API');
let parser = new Parser(HNN);
parser("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.") // 또는 parser.analyze(...)
.then((result) => {
/* Result는 Sentence[] 타입입니다. */
console.log(result[0].getSyntaxTree().getTreeString()); // 첫번째 문장의 구문구조 트리를 출력합니다.
}, (error) => console.error('Error occurred!', error));
Synchronous Call (준비중)
const {Parser} = require('koalanlp/proc');
const {HNN} = require('koalanlp/API');
// ....
let parser = new Parser(HNN);
let result = parser.analyzeSync("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.");
/* Result는 Sentence[] 타입입니다. */
console.log(result[0].getSyntaxTree().getTreeString()); // 첫번째 문장의 구문구조 트리를 출력합니다.
// ...
Python 3
Reference: Parser
from koalanlp import API
from koalanlp.proc import Parser
parser = Parser(API.HNN)
parsed = parser("이 문단을 분석합니다. 문단 구분은 자동으로 합니다.")
# 또는 parser.analyze(...), parser.invoke(...)
print(parsed[0].getSyntaxTree().getTreeString()) # 첫번째 문장의 구문구조 트리를 출력합니다.