koalanlp / python-support

Python wrapper for KoalaNLP (Korean NLP with Java/Scala)
MIT License
31 stars 9 forks source link

Py4JJavaError #11

Closed midannii closed 3 years ago

midannii commented 3 years ago

기초정보

재연을 위한 정보

initialize(hnn='LATEST') parser = Parser(API.HNN) parsed = parser(sentence) # sentence에 해당 문장을 입력했음


### 본문
- 아래와 같은 에러 메세지가 발생하여 등록합니다. 

[root] Java에서 처리하던 중에 문제가 발생했습니다. 문제가 계속된다면, Issue를 등록해주세요. Traceback (most recent call last): File "/opt/anaconda3/lib/python3.7/site-packages/koalanlp/proc.py", line 213, in analyze result += py_list(self.api.analyze(string(paragraph)), item_converter=Sentence.fromJava) File "/opt/anaconda3/lib/python3.7/site-packages/py4j/java_gateway.py", line 1310, in call__ answer, self.gateway_client, self.target_id, self.name) File "/opt/anaconda3/lib/python3.7/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.analyze. : java.lang.StringIndexOutOfBoundsException: begin 1, end -1, length 4 at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3756) at java.base/java.lang.String.substring(String.java:1902) at kaist.cilab.parser.corpusconverter.sejong2treebank.sejongtree.NonterminalNode.readPennInformation(NonterminalNode.java:98) at kaist.cilab.parser.corpusconverter.sejong2treebank.sejongtree.ParseTree.(ParseTree.java:57) at kr.bydelta.koala.hnn.Parser.parseTreeOf(proc.kt:512) at kr.bydelta.koala.hnn.Parser.attachProperty(proc.kt:492) at kr.bydelta.koala.hnn.Parser.attachProperty(proc.kt:376) at kr.bydelta.koala.proc.CanAnalyzeProperty$DefaultImpls.analyze(processors.kt:625) at kr.bydelta.koala.proc.CanParseDependency$DefaultImpls.analyze(processors.kt) at kr.bydelta.koala.hnn.Parser.analyze(proc.kt:376) at jdk.internal.reflect.GeneratedMethodAccessor33.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) 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.base/java.lang.Thread.run(Thread.java:832)

bgnkim commented 3 years ago

좀 많이 늦어서 죄송합니다. 혹시 자바 버전이나 OS 정보를 알 수 있을까요?

------ 5/22 20:10 추가 ------ 재현에 성공하였으나, 이 문제는 KoalaNLP가 아니라 한나눔 분석기 자체의 문제로 보여 Java 버전에서 추가 테스트를 진행중입니다. 한나눔 분석기는 업데이트가 현재 이뤄지지 않고 있어서, 의존구문분석이 필요하시다면 ETRI를 사용하시는 것을 권해드립니다.

------ 5/22 22:12 추가 ------ 제공해주신 문장으로 한나눔 분석기(Java)를 그대로 돌려보았을 때, 구문분석이 수행되지 않는 것을 확인했습니다. 한나눔 분석기의 오류로서, KoalaNLP가 버그 수정을 해드릴 수는 없을 것 같아, 이 이슈는 닫도록 하겠습니다.

참고 자료로 Java에서 실행한 코드 붙여드리며, 한나눔 분석기 사용이 필요하신 경우 해당 개발팀(KAIST)에 버그를 접수하시는 것이 좋을 것 같습니다.

package sample;

import kaist.cilab.parser.berkeleyadaptation.BerkeleyParserWrapper;
import kaist.cilab.parser.berkeleyadaptation.Configuration;
import kaist.cilab.parser.corpusconverter.sejong2treebank.sejongtree.ParseTree;
import kaist.cilab.parser.psg2dg.Converter;

public class HNNRaw {
    public HNNRaw() {
    }

    public static void main(String[] args) {
        Configuration.hanBaseDir = "./";
        BerkeleyParserWrapper parser = new BerkeleyParserWrapper("models/parser/KorGrammar_BerkF_ORIG");
        Converter conv = new Converter();

        try {
            String document = "충돌과 폭발 등 극단상황에 대한 발주자 또는 건축주의 특별한 요구가 있는 경우에는 이를 고려하여 설계하여야 한다.";
            String parsed = parser.parse(document);
            System.out.println(parsed);
            String reformed = Converter.functionTagReForm(parsed);
            System.out.println(reformed);
            String exp = conv.StringforDepformat(reformed);
            System.out.println(exp);
            ParseTree tree = new ParseTree(document, exp, 0, true);
            conv.convert(tree);
            System.out.println(tree.toString());
        } catch (Exception var5) {
            var5.printStackTrace();
        }
    }
}