Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

함수 'HangulAutomata' 오류? #55

Open
StanleyLeel opened this issue Jul 9, 2018 · 5 comments
Open

함수 'HangulAutomata' 오류? #55

StanleyLeel opened this issue Jul 9, 2018 · 5 comments

Comments

@StanleyLeel
Copy link

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

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

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

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

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

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

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

@haven-jeon
Copy link
Owner

제보 감사드립니다.

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

@seyong
Copy link
Contributor

seyong commented Jul 12, 2018

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);
}
};

haven-jeon added a commit that referenced this issue Jul 13, 2018
@StanleyLeel
Copy link
Author

StanleyLeel commented Jul 31, 2018

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

@StanleyLeel
Copy link
Author

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

@StanleyLeel
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants