main.kr.bydelta.koala.daon.proc.kt Maven / Gradle / Ivy
@file:JvmName("Util")
@file:JvmMultifileClass
package kr.bydelta.koala.daon
import daon.core.Daon
import daon.core.data.Eojeol
import kr.bydelta.koala.POS
import kr.bydelta.koala.data.Morpheme
import kr.bydelta.koala.data.Sentence
import kr.bydelta.koala.data.Word
import kr.bydelta.koala.proc.CanTagOnlyASentence
/**
* Daon 형태소 분석기의 KoalaNLP Wrapper입니다.
*
* ## 참고
* **형태소**는 의미를 가지는 요소로서는 더 이상 분석할 수 없는 가장 작은 말의 단위로 정의됩니다.
*
* **형태소 분석**은 문장을 형태소의 단위로 나누는 작업을 의미합니다.
* 예) '문장을 형태소로 나눠봅시다'의 경우,
* * 문장/일반명사, -을/조사,
* * 형태소/일반명사, -로/조사,
* * 나누-(다)/동사, -어-/어미, 보-(다)/동사, -ㅂ시다/어미
* 로 대략 나눌 수 있습니다.
*
* 아래를 참고해보세요.
* * [Morpheme] 형태소를 저장하는 클래스입니다.
* * [POS] 형태소의 분류를 담은 Enum class
*
* ## 사용법 예제
*
* ### Kotlin
* ```kotlin
* val tagger = Tagger()
* val sentence = tagger.tagSentence("문장 1개입니다.")
* val sentences = tagger.tag("문장들입니다. 결과는 목록이 됩니다.")
* // 또는
* val sentences = tagger("문장들입니다. 결과는 목록이 됩니다.")
* ```
*
* ### Scala + [koalanlp-scala](https://koalanlp.github.io/scala-support/)
* ```scala
* import kr.bydelta.koala.Implicits._
* val tagger = new Tagger()
* val sentence = tagger.tagSentence("문장 1개입니다.")
* val sentences = tagger.tag("문장들입니다. 결과는 목록이 됩니다.")
* // 또는
* val sentences = tagger("문장들입니다. 결과는 목록이 됩니다.")
* ```
*
* ### Java
* ```java
* Tagger tagger = new Tagger()
* Sentence sentence = tagger.tagSentence("문장 1개입니다.")
* List sentences = tagger.tag("문장들입니다. 결과는 목록이 됩니다.")
* // 또는
* List sentences = tagger.invoke("문장들입니다. 결과는 목록이 됩니다.")
* ```
*
* @since 2.0.0
*/
class Tagger : CanTagOnlyASentence>() {
/** Daon 품사 분석기 원본 */
val tagger = Daon()
/**
* 변환되지않은, [text]의 분석결과 List를 반환합니다.
*
* @since 2.0.0
* @param text 분석할 String.
* @return 원본 분석기의 결과인 문장 1개
*/
override fun tagSentenceOriginal(text: String): List = tagger.analyze(text)
/**
* List 타입의 분석결과 [result]를 변환, [Sentence]를 구성합니다.
*
* @since 2.0.0
* @param text 품사분석을 수행한 문단의 String입니다.
* @param result 변환할 분석결과.
* @return 변환된 [Sentence] 객체
*/
override fun convertSentence(text: String, result: List): Sentence =
Sentence(
result.map { e ->
val surface = e.surface
val morphemes = e.morphemes.map { m ->
val rawTag = m.tag
val morpheme = m.word
Morpheme(morpheme, rawTag.toSejongPOS(), rawTag)
}
Word(surface, morphemes)
}
)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy