KoNLP icon indicating copy to clipboard operation
KoNLP copied to clipboard

함수 'HangulAutomata' 오류?

Open StanleyLeel opened this issue 7 years ago • 5 comments

안녕하세요. KoNLP 패키지를 잘 쓰고 있습니다. 함수 HangulAutomata를 사용하는 데 있어서 한가지 궁금한 게 있어서 도움을 구합니다.

함수 HangulAutomata를 이용해 한글 음절을 출력하고자 하는데 "ㅇㅗㅃㅏ" 의 ㅃ와 같이 받침으로는 불가능한 자음이 들어간 자모연쇄를 입력하면 Error가 납니다.

다른 함수들은 문제가 없으므로 패키지 설치나 java 설치 문제 등은 아닌 것으로 보이고, 일반적인 다른 자음연쇄 경우에는 문제가 없습니다.

HangulAutomata("ㅇㅗㅂㅂㅏ") 출력: "옵바"

HangulAutomata("ㅇㅗㅂㅏ") 출력: "오바"

HangulAutomata("ㅇㅗㅃㅏ") Error in .jcall(KoHangulAuto, "S", "convert", input) : java.lang.NullPointerException

이러한 오류를 어떻게 해결하려면 어떻게 해야할까요

StanleyLeel avatar Jul 09 '18 07:07 StanleyLeel

제보 감사드립니다.

제가 시스템에 자바 환경이 설정이 되어 있지 않아 원인을 파악하는데 시간이 좀 걸릴거 같습니다.

haven-jeon avatar Jul 09 '18 11:07 haven-jeon

KoJamoAutomata.java 파일에 있는 feed함수에서 chosung 1, jungsung1, jongsung 0 조건 일 때, KoHangul.getJongsungIdx(ch) 가 -1인지 체크하는 조건문이 있는데, KoHangul클래스의 getJongsungIdx 부분을 보면 HashMap값을 리턴하는 것으로 되어있습니다. 'ㅃ'이 종성으로 구분되어있지 않기에 HashMap.get이 null을 리턴하는데, feed함수에서는 -1과 비교 하려고하여 오류가 나는 듯 합니다. Java 8 기준으로 살펴봤습니다.

else if (jongSung == 0) { // chosung 1 jungsung 1 jongsung 0 if (KoHangul.getJongsungIdx(ch) == -1) { //if (KoHangul.getJongsungIdx(ch) != null) { pushcomp(); choSung = ch; } else { jongSung = ch; } } else { // full

public static Integer getJongsungIdx(char ch) { return jongsungIdx_.get(ch); }

private static final HashMap<Character, Integer> jongsungIdx_ = new HashMap<Character, Integer>() { { put((char) 0, 0); put((char) 0x3131, 1); put((char) 0x3132, 2); put((char) 0x3133, 3); put((char) 0x3134, 4); put((char) 0x3135, 5); put((char) 0x3136, 6); put((char) 0x3137, 7); put((char) 0x3139, 8); put((char) 0x313a, 9); put((char) 0x313b, 10); put((char) 0x313c, 11); put((char) 0x313d, 12); put((char) 0x313e, 13); put((char) 0x313f, 14); put((char) 0x3140, 15); put((char) 0x3141, 16); put((char) 0x3142, 17); put((char) 0x3144, 18); put((char) 0x3145, 19); put((char) 0x3146, 20); put((char) 0x3147, 21); put((char) 0x3148, 22); put((char) 0x314a, 23); put((char) 0x314b, 24); put((char) 0x314c, 25); put((char) 0x314d, 26); put((char) 0x314e, 27); } };

seyong avatar Jul 12 '18 19:07 seyong

해결이 된 것인가요? 해결 결과를 사용하려면 어떻게 해야하나요?? ㅠㅠㅠㅠㅠ

StanleyLeel avatar Jul 31 '18 02:07 StanleyLeel

해결 결과를 사용하려면 어떻게 해야하나요?? 제발 알려주시기 바랍니다!

StanleyLeel avatar Aug 09 '18 15:08 StanleyLeel

이 함수를 상시적으로 써야하는데 쓸때마다 수작업하는 게 너무 고됩니다. 어떻게 해야 하는지 좀 알려주세요. 해결이 안되는 건가요???

StanleyLeel avatar Aug 19 '18 14:08 StanleyLeel