Code Monkey home page Code Monkey logo

koalanlp's Introduction

KoalaNLP

Version MIT License API Doc

Build Status Code coverage Known Vulnerabilities

분석기별 품사비교표 nodeJS python scala

소개

KoalaNLP는 한국어 처리의 통합 인터페이스를 지향하는 Java/Kotlin/Scala Library입니다.

이 프로젝트는 서로 다른 형태의 형태소 분석기를 모아, 동일한 인터페이스 아래에서 사용할 수 있도록 하는 것이 목적입니다. (정렬은 개발단체/개발자명 국문 가나다순)

주1-1 Arirang 분석기의 출력을 형태소분석에 적합하게 조금 다듬었으므로, 원본과 약간 다른 결과를 낼 수도 있습니다.

주1-2 UTagger의 2019-7 버전도 공개되어 있지만, 리눅스 개발환경을 위한 라이브러리 파일이 공개되어있지 않아 지원하지 않습니다.

분석기의 개선이나 추가 등을 하고 싶으시다면,

  • 개발이 직접 가능하시다면 pull request를 보내주세요. 테스트 후 반영할 수 있도록 하겠습니다.
  • 개발이 어렵다면 issue tracker에 등록해주세요. 검토 후 답변해드리겠습니다.

특징

KoalaNLP는 다음과 같은 특징을 가지고 있습니다.

  1. 복잡한 설정이 필요없는 텍스트 분석:

    모델은 자동으로 Maven으로 배포되기 때문에, 각 모델을 별도로 설치할 필요가 없습니다.

  2. 코드 2~3 줄로 수행하는 텍스트 처리:

    모델마다 다른 복잡한 설정 과정, 초기화 과정은 필요하지 않습니다. Dependency에 추가하고, 객체를 생성하고, 분석 메소드를 호출하는 3줄이면 끝납니다.

  3. 모델에 상관 없는 동일한 코드, 동일한 결과:

    모델마다 실행 방법, 실행 결과를 표현하는 형태가 다릅니다. KoalaNLP는 이를 정부 및 관계기관의 표준안에 따라 표준화합니다. 따라서 모델에 독립적으로 응용 프로그램 개발이 가능합니다.

  4. Java, Kotlin, Scala, Python 3, NodeJS에서 크게 다르지 않은 코드:

    KoalaNLP는 여러 프로그래밍 언어에서 사용할 수 있습니다. 어디서 개발을 하더라도 크게 코드가 다르지 않습니다.

참고

모든 코드는 Kotlin으로 작성되어 있습니다. Java나 Scala에 비해서 유지 보수에 편리하다고 판단하여 변경하였습니다.

  • Kotlin의 사용법은 Try Kotlin (공식)에서 학습하실 수 있습니다.
  • 모든 코드는 Java와 Kotlin에서 완벽히 상호 호환됩니다.
  • 더불어 기존 1.x의 Scala 사용을 지원하기 위해서 koalanlp-scala를 통해 Implicit 변환을 지원합니다.

License 조항

이 프로젝트 자체(KoalaNLP-core)와 인터페이스 통합을 위한 코드는 소스코드에 저작권 귀속에 대한 별도 지시사항이 없는 한 v1.8.0부터 MIT License을 따르며, 원본 분석기의 License와 저작권은 각 저작권자가 지정한 바를 따릅니다.

단, GPL의 저작권 조항에 따라, GPL 하에서 이용이 허가되는 패키지들의 저작권은 해당 저작권 규정을 따릅니다.

  • Hannanum 및 NLP_HUB: GPL v3
  • KKMA: GPL v2 (GPL v2를 따르지 않더라도, 상업적 이용시 별도 협의 가능)
  • KOMORAN 3.x: Apache License 2.0
  • Open Korean Text: Apache License 2.0
  • UTagger: 교육 및 연구용으로 사용시 제한 없음. 상업용인 경우 울산대와 기술이전 등의 유료 협약 필요
  • SEunjeon: Apache License 2.0
  • 아리랑: Apache License 2.0
  • RHINO: MIT (참고: 이전 버전은 GPL v3)
  • Daon: 지정된 조항 없음
  • ETRI: 별도 API 키 발급 동의 필요
  • Khaiii: Apache License 2.0

Dependency 추가

Java 패키지 목록

패키지명 설명 버전 License (원본)
koalanlp-core 통합 인터페이스의 정의가 등재된 중심 묶음입니다. Version MIT
koalanlp-scala Scala를 위한 편의기능 (Implicit conversion 등) Version MIT
koalanlp-server HTTP 서비스 구성을 위한 패키지입니다. (2.x 개발중) MIT
koalanlp-kmr 코모란 Wrapper / 분석범위: 형태소 Version Apache 2.0
koalanlp-eunjeon 은전한닢 Wrapper / 분석범위: 형태소 Version Apache 2.0
koalanlp-arirang 아리랑 Wrapper / 분석범위: 형태소 2-1 Version Apache 2.0
koalanlp-rhino RHINO Wrapper / 분석범위: 형태소 2-1 Version MIT
koalanlp-daon Daon Wrapper / 분석범위: 형태소 2-1 Version MIT(별도 지정 없음)
koalanlp-khaiii Kakao Khaiii Wrapper / 분석범위: 형태소 2-3 Version Apache 2.0
koalanlp-utagger 울산대 UTagger Wrapper / 분석범위: 형태소 2-4 Version 교육/연구용 무료, 상업용 별도협약
koalanlp-okt Open Korean Text Wrapper / 분석범위: 문장분리, 형태소 Version Apache 2.0
koalanlp-kkma 꼬꼬마 Wrapper / 분석범위: 형태소, 의존구문 2-1 Version GPL v2
koalanlp-hnn 한나눔 Wrapper / 분석범위: 문장분리, 형태소, 구문분석, 의존구문 2-1 Version GPL v3
koalanlp-etri ETRI Open API Wrapper / 분석범위: 형태소, 구문분석, 의존구문, 개체명, 의미역 Version MIT2-2

주2-1 꼬꼬마, 한나눔, 아리랑, RHINO 분석기는 타 분석기와 달리 Maven repository에 등재되어 있지 않아, 원래는 수동으로 직접 추가하셔야 합니다. 이 점이 불편하다는 것을 알기에, KoalaNLP는 assembly 형태로 해당 패키지를 포함하여 배포하고 있습니다. 포함된 패키지를 사용하려면, assembly classifier를 사용하십시오. "assembly" classifier가 지정되지 않으면, 각 분석기 라이브러리가 빠진 채로 dependency가 참조됩니다.

주2-2 ETRI의 경우 Open API를 접근하기 위한 코드 부분은 KoalaNLP의 License 정책에 귀속되지만, Open API 접근 이후의 사용권에 관한 조항은 ETRI에서 별도로 정한 바를 따릅니다. 따라서, ETRI의 사용권 조항에 동의하시고 키를 발급하셔야 하며, 다음 위치에서 발급을 신청할 수 있습니다: 키 발급 신청

주2-3 Khaiii 분석기의 경우는 Java가 아닌 C++로 구현되어 사용 전 분석기의 설치가 필요합니다. Python3.6 및 CMake 3.10+만 설치되어 있다면 설치 자체가 복잡한 편은 아니니 여기를 참조하여 설치해보세요. 참고로, KoalaNLP가 Travis CI에서 패키지를 자동 테스트하기 위해 구현된 bash script는 여기에 있습니다.

주2-4 UTagger 분석기의 경우에도 C/C++로 구현되어, 사용 전 분석기의 설치가 필요합니다. 윈도우와 리눅스(우분투, CentOS)용 라이브러리 파일만 제공되며, 설치 방법은 여기를 참조하십시오.

실행환경

  • KoalaNLP의 모든 코드는 OpenJDK 12에서 테스트 되었습니다.
  • Kotlin의 경우는 1.3.50이 기준입니다.
  • Scala의 경우는 KoalaNLP-scala 패키지의 버전에 따릅니다. 단, 은전한닢과 Open Korean Text는 의존하는 라이브러리가 Scala에서 개발되어 Scala에서 사용시 제한이 있을 수 있으며, 이는 scala-koalanlp를 참조하십시오.
  • Python과 NodeJS는 각각의 저장소를 참고하십시오: nodejs-koalanlp py-koalanlp

Gradle

ext.koala_version = '2.1.4'

repositories {
    mavenCentral()
    jcenter()
    maven { url "https://jitpack.io" } // 코모란의 경우에만 추가.
}

dependencies{
    // 코모란의 경우
    implementation "kr.bydelta:koalanlp-kmr:${ext.koala_version}" 
    // 은전한닢 프로젝트(Mecab-ko)의 경우
    implementation "kr.bydelta:koalanlp-eunjeon:${ext.koala_version}"
    // 아리랑의 경우
    implementation "kr.bydelta:koalanlp-arirang:${ext.koala_version}:assembly"
    // RHINO의 경우 
    implementation "kr.bydelta:koalanlp-rhino:${ext.koala_version}:assembly"
    // Daon의 경우
    implementation "kr.bydelta:koalanlp-daon:${ext.koala_version}:assembly"
    // OpenKoreanText의 경우
    implementation "kr.bydelta:koalanlp-okt:${ext.koala_version}" 
    // 꼬꼬마의 경우
    implementation "kr.bydelta:koalanlp-kkma:${ext.koala_version}:assembly"
    // 한나눔의 경우
    implementation "kr.bydelta:koalanlp-hnn:${ext.koala_version}:assembly" 
    // ETRI Open API의 경우
    implementation "kr.bydelta:koalanlp-etri:${ext.koala_version}"
    // Khaiii의 경우 (Khaiii C++ 별도 설치 필요)
    implementation "kr.bydelta:koalanlp-khaiii:${ext.koala_version}"
    // REST Server Service의 경우 (준비중)
    implementation "kr.bydelta:koalanlp-server:${ext.koala_version}"
}

SBT

(버전은 Latest Release 기준입니다. SNAPSHOT을 사용하시려면, latest.integration을 사용하세요.)

val koalaVer = "2.1.4"

// 코모란 분석기의 경우
resolvers += "jitpack" at "https://jitpack.io/"
libraryDependencies += "kr.bydelta" % "koalanlp-kmr" % koalaVer

// 은전한닢 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-eunjeon" % koalaVer

// 아리랑 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-arirang" % koalaVer classifier "assembly"

// RHINO 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-rhino" % koalaVer classifier "assembly"

// Daon 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-daon" % koalaVer classifier "assembly"

// Open Korean Text 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-okt" % koalaVer

// 꼬꼬마 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-kkma" % koalaVer classifier "assembly"

// 한나눔 분석기의 경우
libraryDependencies += "kr.bydelta" % "koalanlp-hannanum" % koalaVer classifier "assembly"

// ETRI 분석기의 경우
resolvers += Resolver.JCenterRepository
libraryDependencies += "kr.bydelta" % "koalanlp-etri" % koalaVer

// Khaiii 분석기의 경우 (Khaiii C++ 별도 설치 필요)
resolvers += Resolver.JCenterRepository
libraryDependencies += "kr.bydelta" % "koalanlp-khaiii" % koalaVer

// UTagger 분석기의 경우 (UTagger C++ 별도 설치 필요)
resolvers += Resolver.JCenterRepository
libraryDependencies += "kr.bydelta" % "koalanlp-utagger" % koalaVer

// REST Server Service의 경우 (준비중)
libraryDependencies += "kr.bydelta" % "koalanlp-server" % koalaVer

Maven

Maven을 사용하시는 경우, 다음과 같습니다. ${TAGGER_PACK}위치에는 원하는 품사분석기의 패키지를 써주시고, ${TAGGER_VER}위치에는 품사분석기의 버전을 써주세요.

<dependency>
  <groupId>kr.bydelta</groupId>
  <artifactId>koalanlp-${TAGGER.PACK}</artifactId>
  <version>${TAGGER_VER}</version>
</dependency>

Classifier를 추가하실 경우, <artifactId>다음 행에 다음 코드를 추가하세요.

  <classifier>assembly</classifier>

예를 들어서, 꼬꼬마 분석기(koalanlp-kkma) 버전 2.1.3을 추가하고자 한다면, 아래와 같습니다.

<dependency>
  <groupId>kr.bydelta</groupId>
  <artifactId>koalanlp-kkma</artifactId>
  <classifier>assembly</classifier>
  <version>2.1.3</version>
</dependency>

사용방법

아래에는 대표적인 특징만 기술되어 있습니다.

상세한 사항은 Usage, Sample 또는 API Doc을 참고하십시오.

여러 패키지의 사용

통합 인터페이스는 여러 패키지간의 호환이 가능하게 설계되어 있습니다. 이론적으로는 타 패키지의 품사 분석 결과를 토대로 구문 분석이 가능합니다.

Note:

  • 본 분석의 결과는 검증되지 않았습니다.
  • 신조어 등으로 인해 한나눔이나 꼬꼬마에서 품사 분석이 제대로 수행되지 않을 경우를 위한 기능입니다.
  • 사용자 정의 사전은 TaggerParser의 대상이 되는 패키지에 모두에 추가하여야 합니다.
  • 타 패키지의 분석 결과는 ETRI 분석기의 입력으로 쓸 수 없습니다.

Kotlin

/* 패키지 명: 한나눔(hnn), 코모란(kmr), 꼬꼬마(kkma), 은전한닢(eunjeon), 트위터(twt), 아리랑(arirang) */
// 예시에서는 트위터 문장분석기, 은전한닢 품사 분석, 꼬꼬마 구문 분석을 진행함.
import kr.bydelta.koala.twt.SentenceSplitter
import kr.bydelta.koala.eunjeon.Tagger
import kr.bydelta.koala.kkma.Parser

val splitter = SentenceSplitter()
val tagger = Tagger()
val parser = Parser()

val paragraph = "누군가가 말했다. Python에는 KoNLPy가 있다. Kotlin은 KoalaNLP가 있다."
val sentences = splitter(paragraph)
val tagged = sentences.map{ tagger.tagSentence(it) }
val parsed = tagged.map{ parser.parse(it) }

Scala

import kr.bydelta.koala.twt.SentenceSplitter
import kr.bydelta.koala.eunjeon.Tagger
import kr.bydelta.koala.kkma.Parser

val splitter = new SentenceSplitter
val tagger = new Tagger
val parser = new Parser

val paragraph = "누군가가 말했다. Python에는 KoNLPy가 있다. Scala는 KoalaNLP가 있었다."
val sentences = splitter.invoke(paragraph)
val tagged = sentences.map(tagger.tagSentence)
val parsed = tagged.map(parser.parse)

Java

import kr.bydelta.koala.twt.SentenceSplitter;
import kr.bydelta.koala.eunjeon.Tagger;
import kr.bydelta.koala.kkma.Parser;
import kr.bydelta.koala.Sentence;

SentenceSplitter splitter = new SentenceSplitter();
Tagger tagger = new Tagger();
Tagger parser = new Parser();

String paragraph = "누군가가 말했다. Python에는 KoNLPy가 있다. Java는 KoalaNLP가 있었다.";
List<String> sentences = splitter.invoke(paragraph);
for(String line : sentences){
  Sentence tagged = tagger.tagSentence(line);
  Sentence parsed = parser.parse(tagged);
}

품사분석기별 결과 비교

Sample: 결과비교를 참조해주세요.

koalanlp's People

Contributors

9bow avatar bgnkim avatar yeoupooh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

koalanlp's Issues

파서,태그,의존관계 질문.

import kr.bydelta.koala.hnn.Parser;
import kr.bydelta.koala.hnn.Tagger;

public class hnn_r {
public static void main(String[] args) {
//Tagger & Parser 사용법
Tagger tagger = new Tagger();
Parser parser = new Parser();
String line = "철수는 손을 베다";

    System.out.println(tagger.tagSentence(line));
    System.out.println(parser.parse(line));
}

}

결과는 다음과 같습니다.

철수는 손을 베다
철수는 = 철수/NNG(ncpa)는/JX(jxc)
손을 = 손/NNG(ncn)을/JKO(jco)
베다 = 베/NNG(ncn)이/VCP(jp)다/EF(ef)
철수는 손을 베이다
철수는 = 철수/NNG(NNG)는/JX(JX)
손을 = 손/NNG(NNG)을/JKO(JKO)
베이다 = 베/NNG(NNG)이/VCP(VCP)다/EC(EC)
의존관계:--[Subject]--> 0 --[Object]--> 1[ROOT]

뜬금없이 "베이다" 가 나오고 주어,목적어 다음에 root 가 나오는데 root 의 의미를 모르겠습니다.
숫자의 의미도 잘 이해가 안가서 같이 질문드립니다

'xml.etree.ElementTree.Element' object has no attribute 'getchildren'

Python 버전
3.9.7
KoalaNLP 버전
koalanlp-2.1.7

KoalaNLP를 사용한 코드 부분을 보여주세요.

from koalanlp.Util import initialize, finalize
from koalanlp.proc import *
from koalanlp import API

initialize(java_options="-Xmx4g -Dfile.encoding=utf-8", KKMA="2.0.2", EUNJEON="2.0.2", ETRI="2.0.2")

안녕하세요, 패키지를 써보고 싶은데 initialize 하면 에러 메세지가 뜹니다, 수정할 수 있는 방법이 있을까요?
'xml.etree.ElementTree.Element' object has no attribute 'getchildren'

initialize 에 다른 옵션을 써도 마찬가지입니다 (예: initialize(java_options="-Xmx4g", ETRI="LATEST"))

초기화 때 필수 파일들 다우로드 안 됨

문장단위로 분리 하고 싶어서 python 3.6, Koalanlp 2.1.3 사용하려고 하는 데요,

근데 sentencesplitter(api=API.HNN) 명령 실행 하면 초기화 필요라는 문제가 나옵니다.

초기화 하려고 해서

from koalanlp.Util import initialize
	initialize(hnn='LATEST')

실행해보니까 여리 필수 library를 못 찾다는 에러가 나옵니다.

image

이 문제를 해결 방안 있거나 필수 librarires 좀 공유 해주시면 감사드리겠습니다.

전체 코드를 아래와 같습니다.
image

감사합니다.

Dictionary Learner: Enhancement

This issue is for:

  • Dictionary Learner Enhancement.

Current Dictionary Learner has many bugs, so patch them with a CRF-style learner. It requires another new independent package with dependency on "factorie".

사용자 사전 저장/불러오기

말뭉치에서 학습한 사전 정보를 저장하고 불러오는 기능

  • 사전을 Stream으로 출력
  • Stream에서 사전 읽기
  • 말뭉치에서 고유명사 학습하는 방법 README에 서술.

[python 3] 설치 과정 중 jnius의 Class not found b'kr/bydelta/koala/POS'

기초정보

  • KoalaNLP 버전은 얼마였나요? 2.0.6
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • Python 3 +
    • 기타 JVM 계열 언어
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

Python 3+ 설치 소개 문서에서 안내해 주신 바와 같이
Cython, koalanlp를 오류 없이 설치하고 아래 과정을 진행하였습니다.

from koalanlp.Util import initialize
initialize(java_options="-Xmx4g", KKMA="2.0.4", ETRI="2.0.4")

본문

  • 그 결과 Class not found b'kr/bydelta/koala/POS' 라는 JavaException이 나타났습니다.

아래는 오류의 전체 내용입니다.

C:\anaconda64bit\lib\site-packages\koalanlp\Util.py in initialize(java_options, **packages)
184
185 # Enum 항목 초기화
--> 186 POS.values()
187 PhraseTag.values()
188 DependencyTag.values()

C:\anaconda64bit\lib\site-packages\koalanlp\types.py in values()
46 """
47 if len(POS.VALUES) == 0:
---> 48 POS.VALUES = _enum_value_dict(class.name, lambda x: POS(x))
49 for name, value in POS.VALUES.items():
50 setattr(POS, name, value)

C:\anaconda64bit\lib\site-packages\koalanlp\types.py in _enum_value_dict(cls, item_converter)
6
7 def _enum_value_dict(cls, item_converter):
----> 8 return {value.name: value for value in py_list(koala_class_of(cls).values(), item_converter)}
9
10

C:\anaconda64bit\lib\site-packages\koalanlp\jnius.py in koala_class_of(*path)
18
19 def koala_class_of(*path):
---> 20 return class_of('kr.bydelta.koala', *path)
21
22

C:\anaconda64bit\lib\site-packages\koalanlp\jnius.py in class_of(*path)
12 if path not in _CLASS_DIC:
13 print(path)
---> 14 _CLASS_DIC[path] = autoclass(path)
15
16 return _CLASS_DIC[path]

C:\anaconda64bit\lib\site-packages\jnius\reflect.py in autoclass(clsname)
157
158 # c = Class.forName(clsname)
--> 159 c = find_javaclass(clsname)
160 if c is None:
161 raise Exception('Java class {0} not found'.format(c))

jnius\jnius_export_func.pxi in jnius.find_javaclass()

JavaException: Class not found b'kr/bydelta/koala/POS'

혹시 이 부분은 어떻게 해결해야할지 여쭤보고 싶습니다.

감사합니다.

말뭉치에서 학습하는 사용자정의 사전

대량 말뭉치에서 반복적으로 나타나는 단어+조사의 형태 비교를 통해, 필요한 고유 명사를 찾아 자동으로 학습하는 기능.

  1. 말뭉치에서 조사로 끝나는 단어 추출
  2. 조사로 끝나는 단어들 간의 비교, 필요한 고유명사 추출
  3. 사전 자동 등록

Java에서 처리하던 중에 문제가 발생했습니다. 문제가 계속된다면, Issue를 등록해주세요.

기초정보

  • Python은 koalanlp/python-support, NodeJS는 koalanlp/nodejs-support repository에 등록해주세요.
  • KoalaNLP 버전은 얼마였나요?
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • [x ] 기타 JVM 계열 언어
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

  • 어떤 문장을 시도하셨습니까?
https://koalanlp.github.io/koalanlp/usage/NER.html 이 사이트에서 python 3로 실행해볼 수 있는 예제를 사용하였습니다.
  • KoalaNLP를 사용한 코드 부분을 보여주세요.
from koalanlp import API
from koalanlp.proc import EntityRecognizer
from koalanlp.Util import initialize, finalize

initialize(ETRI='LATEST')
recognizer = EntityRecognizer(API.ETRI, etri_key='키번호')

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

# 첫번째 문장의 개체명들을 출력합니다.
for entity in parsed[0].getEntities():
    print(entity)

finalize()

본문

현재 인증키를 받아 예제코드를 진행해보려 구글 코랩에서 진행중입니다. 하지만 py4j.protocol.Py4JJavaError: An error occurred while calling o209.analyze.
: connect timed out 이와 같은 오류가 지속적으로 발생하고 있습니다.
[root] Java에서 처리하던 중에 문제가 발생했습니다. 문제가 계속된다면, Issue를 등록해주세요. 이와 같은 오류 처리 표시가 함께 표출되고 있습니다. 이를 해결하기 위해 어떻게 해야하나요??

RHINO 개발자입니다

기초정보

  • Python은 koalanlp/python-support, NodeJS는 koalanlp/nodejs-support repository에 등록해주세요.
  • KoalaNLP 버전은 얼마였나요?
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • 기타 JVM 계열 언어
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

  • 어떤 문장을 시도하셨습니까?
[여기에 문장을 넣어주세요]
  • KoalaNLP를 사용한 코드 부분을 보여주세요.
// 여기에 사용한 코드부분을 보여주세요. 윗줄에 'kotlin'라고 되어있는 언어유형을 사용중인 언어로 바꾸는것을 권합니다.

본문

  • 아래에 본문을 입력해주세요.

안녕하세요, RHINO 개발자입니다.
RHINO를 KoalaNLP에 등록해주셔서 감사합니다.

RHINO 소개글에서 3.x 버전이 단어 일부분을 누락하는 등의 문제가 있다는 내용을 보고 연락드리게 되었습니다.
어떠한 문제들인지, 해당 문장은 무엇이었는지 알 수 있을까요?

감사합니다.

build & assembly 방식 문의

기초정보

  • KoalaNLP 버전은요? (Version of KoalaNLP)? 최신버전입니다.
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? (Language Type)? ([]안에 x표하여 표기해주세요; Please mark one with [x] symbol)
    • Java
    • [x ] Scala
    • Other
  • 문제의 유형은 어떤 것인가요? (Type of this issue)?
    • 버그리포트. Bug report
    • 개선점제안. Idea/Suggestion for a improvement
    • 사용법질문. Question about using KoalaNLP
    • 기타. Other

본문

  • 아래에 본문을 입력해주세요. (Describe your issue here.)

sbt aseembly 로 수행하니
java.io.IOException: Cannot run program "javac" (in directory ... )CreateProcess error=2, 지정된 파일을 찾을 수 없습니다.
에러가 발생하는데, 빌드 수행시 추가적으로 해줘야 하는 것이 있나요?

한나눔 에러인가요?

간단한 번역기. 복잡한 파서 <- 를 분석하라고 했더니 xpn 에러가 떠서 올립니다.

[main] INFO kr.bydelta.koala.traits.CanExtractResource - Extracting dictionary resources to C:\Users\leesm\AppData\Local\Temp\koalanlp-hannanum.
[main] INFO kr.bydelta.koala.traits.CanExtractResource - Extraction finished.
Input a sentence >> 간단한 번역기. 복잡한 파서
FILE: C:\Users\leesm\AppData\Local\Temp\koalanlp-hannanum\data/kE/dic_analyzed.txt
Exception in thread "main" java.util.NoSuchElementException: No value found for 'XPN'
at scala.Enumeration.$anonfun$withName$2(Enumeration.scala:125)
......

아래는 사용한 소스코드입니다...만 올려주셨던 예제와 똑같습니다.

import kr.bydelta.koala.POS;
import kr.bydelta.koala.POS$;
import kr.bydelta.koala.data.Sentence;
import kr.bydelta.koala.hnn.JavaDictionary;//한나눔
import kr.bydelta.koala.hnn.Parser; //한나눔
import kr.bydelta.koala.hnn.Tagger; //한나눔

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

@SuppressWarnings("WeakerAccess")
public class App {
public static void main(String[] args) {
/* 사용자정의사전 사용법 */
// 1. 형태소 기본형 추가.
List list = new LinkedList<>();
list.add("설빙");
list.add("구글하");

    // 2. 기본형별 품사 지정.
    List<POS$.Value> pos = new LinkedList<>();
    pos.add(POS.NNG());
    pos.add(POS.VV());

    // 3. JavaDictionary에 추가.
    JavaDictionary.addUserDictionary(list, pos);

    /* Tagger & Parser 사용법 */
    Tagger tagger = new Tagger();
    Parser parser = new Parser();
    String line;
    Scanner scan = new Scanner(System.in);

    do {
        System.out.print("Input a sentence >> ");
        line = scan.nextLine();
        if (!line.isEmpty()) {
            // 문단 단위를 Tagging하는 경우:
            List<Sentence> paragraph = tagger.jTagParagraph(line);
            // 1개 문장인 경우는, 아래와 같습니다.
            // Sentence sent = tagger.tagSentence(line);
            // 문장이 1개라면,바로 의존관계분석을 할 수도 있습니다.
            // Sentence sent = parser.parse(line);

            for (Sentence sent : paragraph) {
                // 아래와 같이, 의존관계분석을 진행합니다.
                // Sentence 객체를 넣었으므로, 해당 객체에 변경사항이 기록됩니다.
                parser.parse(sent);

                System.out.println(sent.singleLineString());
                System.out.println();
            }
        }
    } while (!line.isEmpty());
}

}

java.lang.NoClassDefFoundError: scala/collection/immutable/StringOps 문제 발생

기초정보

  • KoalaNLP 버전은 얼마였나요?
    2.1.3

  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    Python 3.6

  • 문제의 유형은 어떤 것인가요?
    버그리포트

재연을 위한 정보

  • 초기화 시에 문제가 생깁니다. Ubuntu 및 OS X 에서 둘다 아래와 같은 문제가 발생합니다.
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/koalanlp/proc.py", line 39, in sentences
    result += py_list(self.__api.invoke(string(paragraph)), lambda x: x)
  File "/usr/lib/python3.6/site-packages/py4j/java_gateway.py", line 1286, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/usr/lib/python3.6/site-packages/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling o209.invoke.
: java.lang.NoClassDefFoundError: scala/collection/immutable/StringOps
	at org.openkoreantext.processor.tokenizer.KoreanSentenceSplitter$.<init>(KoreanSentenceSplitter.scala:30)
	at org.openkoreantext.processor.tokenizer.KoreanSentenceSplitter$.<clinit>(KoreanSentenceSplitter.scala)
	at org.openkoreantext.processor.OpenKoreanTextProcessor$.splitSentences(OpenKoreanTextProcessor.scala:144)
	at org.openkoreantext.processor.OpenKoreanTextProcessor.splitSentences(OpenKoreanTextProcessor.scala)
	at kr.bydelta.koala.okt.SentenceSplitter.sentences(proc.kt:162)
	at kr.bydelta.koala.proc.CanSplitSentence$DefaultImpls.invoke(processors.kt:63)
	at kr.bydelta.koala.okt.SentenceSplitter.invoke(proc.kt:153)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
	at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
	at py4j.Gateway.invoke(Gateway.java:282)
	at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
	at py4j.commands.CallCommand.execute(CallCommand.java:79)
	at py4j.GatewayConnection.run(GatewayConnection.java:238)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: scala.collection.immutable.StringOps
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 18 more

  • KoalaNLP를 사용한 코드 부분을 보여주세요.
initialize(OKT='latest', force_download=False)

본문

매뉴얼에 있는 사전설치 항목은 모두 설치했는데 위와 같은 문제가 발생합니다. 도움을 주실 수 있나요?

SBT 설정 확인: 버전대 강제 지정

기초정보

  • KoalaNLP 버전은요? (Version of KoalaNLP)? 1.8.2 / Scala_2.11, 2.12
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? (Language Type)? ([]안에 x표하여 표기해주세요; Please mark one with [x] symbol)
    • Java
    • Scala
    • Other
  • 문제의 유형은 어떤 것인가요? (Type of this issue)?
    • 버그리포트. Bug report
    • 개선점제안. Idea/Suggestion for a improvement
    • 사용법질문. Question about using KoalaNLP
    • 기타. Other

본문

  • 아래에 본문을 입력해주세요. (Describe your issue here.)

SBT에 가변 버전으로 지정된 부분들을 전수 검토하고, 고정 버전으로 변경 (Issue #19 에서 파생)

Exception: API.EUNJEON는 Tagger를 지원하지 않습니다!

기초정보

  • KoalaNLP 버전은 얼마였나요? 2.0.7
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • Python3
    • 기타 JVM 계열 언어
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

  • 어떤 문장을 시도하셨습니까?
[from koalanlp.Util import initialize
initialize(java_options="-Xmx4g -Dfile.encoding=utf-8", KKMA="2.0.4", ETRI="2.0.4", EUNJEON="2.0.2", KMR = "2.0,5")
from koalanlp.proc import Tagger,SentenceSplitter
from koalanlp import API

tagger = Tagger(API.EUNJEON)]
  • KoalaNLP를 사용한 코드 부분을 보여주세요.
// ---------------------------------------------------------------------------
JavaException                             Traceback (most recent call last)
~/anaconda3/envs/gc/lib/python3.5/site-packages/koalanlp/API.py in _query(api, type)
     21     try:
---> 22         java_api = koala_class_of(api, type)
     23         return java_api

~/anaconda3/envs/gc/lib/python3.5/site-packages/koalanlp/jnius.py in koala_class_of(*path)
     19 def koala_class_of(*path):
---> 20     return class_of('kr.bydelta.koala', *path)
     21 

~/anaconda3/envs/gc/lib/python3.5/site-packages/koalanlp/jnius.py in class_of(*path)
     13     if path not in _CLASS_DIC:
---> 14         _CLASS_DIC[path] = autoclass(path)
     15 

~/anaconda3/envs/gc/lib/python3.5/site-packages/jnius/reflect.py in autoclass(clsname)
    158     # c = Class.forName(clsname)
--> 159     c = find_javaclass(clsname)
    160     if c is None:

jnius/jnius_export_func.pxi in jnius.find_javaclass()

JavaException: Class not found b'kr/bydelta/koala/eunjeon/Tagger'

During handling of the above exception, another exception occurred:

Exception                                 Traceback (most recent call last)
<ipython-input-4-f002cb085532> in <module>
      8 from koalanlp import API
      9 
---> 10 tagger = Tagger(API.EUNJEON)

~/anaconda3/envs/gc/lib/python3.5/site-packages/koalanlp/proc.py in __init__(self, api, apiKey, useLightTagger)
     87             self.__api = API._query(api, __class__.__name__)(useLightTagger)
     88         else:
---> 89             self.__api = API._query(api, __class__.__name__)()
     90 
     91     def tag(self, *text: str) -> List[Sentence]:

~/anaconda3/envs/gc/lib/python3.5/site-packages/koalanlp/API.py in _query(api, type)
     23         return java_api
     24     except Exception:
---> 25         raise Exception('API.%s는 %s를 지원하지 않습니다!' % (api.upper(), str(type)))
     26 
     27 

Exception: API.EUNJEON는 Tagger를 지원하지 않습니다!

본문

  • initialization후 처음에는 잘 작동 됐습니다.
    하지만 재부팅 후 다시 실행하니 저런 에러가 나타납니다.
    API.KMR도 마찬가지구요.

사용환경은 Ubuntu 16.04 LTS
아나콘다3 가상환경에서 수행하고 있습니다.
Python 3.5.6
java-8-oracle
javac version은 1.8.0_201입니다.

소스코드를 컴파일하라는 게 어떻게 하는건지 잘 모르겠습니다.

cmd창에서 java -jar KoreanAnalyzer-0.2.2.3-jar-with-dependencies.jar를 쳤더니

C:\Users\dev\Desktop\DEVELOPER\KoreanAnalyzer-master> java -jar KoreanAnalyzer-0
.2.2.3-jar-with-dependencies.jar
오류: 기본 클래스 kr.kaist.ir.drm.entail.extraction.PairExtract을(를) 찾거나 로
드할 수 없습니다.

이렇게 뜨네요... 컴파일을 어떻게 해야 하는건지 자세한 설명을 부탁드립니다...ㅠ

초기화 오류

기초정보

  • KoalaNLP 버전은 얼마였나요?
    2.1.3
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • 기타 JVM 계열 언어
    • Python
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

  • 어떤 문장을 시도하셨습니까?
[여기에 문장을 넣어주세요]
  • KoalaNLP를 사용한 코드 부분을 보여주세요.
// 여기에 사용한 코드부분을 보여주세요. 윗줄에 'kotlin'라고 되어있는 언어유형을 사용중인 언어로 바꾸는것을 권합니다.
from koalanlp.Util import initialize, finalize
from koalanlp.proc import Parser
from koalanlp import API

initialize(KKMA='2.0.2')
finalize()

본문

  • 아래에 본문을 입력해주세요.
    위의 코드를 실행하면 아래와 같은 오류가 뜹니다.
    그림1

Specs2 테스트 작성

Multi-thread 환경에서 적합한지 확인 필요.

  1. 분석 결과 확인을 위한 Specs 테스트 작성
  2. Multi-thread safety 확인을 위한 Specs 테스트 작성
  3. 테스트 결과 나타나는 문제사항 확인.

의존관계 트리 질문.

소스는 아래와 같습니다.
public class hnn_r {
public static void main(String[] args) {
//Tagger & Parser 사용법
Tagger tagger = new Tagger();
Parser parser = new Parser();
String line = "멋진 나는 밥만있어도 함께 먹는다";
Sentence sent = parser.parse(line);

    System.out.println(sent.treeString());
}

}

결과문은 아래와 같습니다.
+Undefined : 먹/VV+는다/EF ... ROOT
+Subject : 나/NP+는/JX ... SBJ
+Object : 밥만있어/NNG+도/JX ... OBJ
+Adjunct : 함께/MAG ... ADV
+Modifier : 멋지/VA+ㄴ/ETM ... MOD

+Modifier : 멋지/VA+ㄴ/ETM ... MOD<- 가 어느 노드의 하위 노드인지 구분하는법을 몰라서 질문드립니다.

또한

"멋진 나는 저녁이 밥일지라도 함께 먹는다"의 결과는
+Undefined : 먹/VV+는다/EF ... ROOT
+Subject : 나/NP+는/JX ... SBJ
+Complement : ㄹ지/VV+라도/EC ... CMP
+Adjunct : 함께/MAG ... ADV
+Modifier : 멋지/VA+ㄴ/ETM ... MOD
+Subject : 저녁/NNG+이/JKS ... SBJ
+Subject : 밥/NNG+이/JKS ... SBJ

로 나왔습니다. 저녁밥과 멋진이 함께 있어서 어느 명사의 하위 노드인지 트리만 봐서는 잘 모르겠습니다.

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'khaiii' 에러 발생

기초정보

  • KoalaNLP 버전은 얼마였나요?
    2.1.4
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? ([]안에 x표하여 표기해주세요)
    • Kotlin
    • Java
    • Scala
    • 기타 JVM 계열 언어
  • 문제의 유형은 어떤 것인가요?
    • 버그리포트
    • 개선점제안
    • 사용법질문
    • 기타

재연을 위한 정보

  • khaiii 실행시에 문제가 생깁니다.
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'khaiii'

  • KoalaNLP를 사용한 코드 부분을 보여주세요.
    Java 코드입니다.

스크린샷 2021-06-24 오후 1 40 54

pom.xml 코드입니다.
스크린샷 2021-06-24 오후 1 48 05

그리고, 현재 macOS 에서 진행중인데, prok.kt를 보니, LD_LIBRARY_PATH와 같은 환경변수를 등록하라고 하셔서
export DYLD_LIBRARY_PATH=/usr/local/share/khaiii 와 같이 등록해주었지만 여전히 같은 에러가 발생합니다.

본문

  • khaiii를 실행하는데 위와 같은 문제가 발생합니다. 혹시 이와 관련되어 도움을 주실 수 있을까요? 감사합니다! :)

Spark에서 사용을 하기위한 방안 문의 (scala 2.12 이슈)

기초정보

  • KoalaNLP 버전은요? (Version of KoalaNLP)?
    • g : kr.bydelta
    • a : koalanlp-twitter_2.11
    • v : 1.5.2
  • 어떤 프로그래밍 언어에서 문제가 생겼습니까? (Language Type)? ([]안에 x표하여 표기해주세요; Please mark one with [x] symbol)
    • Java
    • Scala
    • Other
  • 문제의 유형은 어떤 것인가요? (Type of this issue)?
    • 버그리포트. Bug report
    • 개선점제안. Idea/Suggestion for a improvement
    • 사용법질문. Question about using KoalaNLP
    • 기타. Other

재연을 위한 정보

  • KoalaNLP를 사용한 코드 부분을 보여주세요. (Please show your code snippet which uses KoalaNLP.)
import kr.bydelta.koala.twt.SentenceSplitter

def extractWord(text: String): List[String] = {
  val sentenceSplitter = new SentenceSplitter
  sentenceSplitter.sentences(text).toList
}

본문

Spark(2.2.0)을 사용하여 단어 목록을 추출하고자 하는 과정에서 scala 2.12 버전에 대한 이슈가 발생하였습니다.

java.langNosuchMethroError: scala.Product$init ...

의존성을 체크해볼 결과 koalanlp-core 쪽의 의존성 트리상에 scala-library 2.12.0 에 대한 의존성이 있는것으로 나왔습니다.
Spark의 경우 아직 scala 2.12를 지원하지 않는것으로 알고 있고 이에 따라 발생하는 이슈로 확인되었는데
scala 2.12를 완전히 회피 할 수 있는 방안이 있는지 궁금합니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.