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

[Feature]: 가능한 조합의 문자인지 검사하는 함수 #129

Closed
ienrum opened this issue Jun 23, 2024 · 11 comments
Closed

[Feature]: 가능한 조합의 문자인지 검사하는 함수 #129

ienrum opened this issue Jun 23, 2024 · 11 comments

Comments

@ienrum
Copy link

ienrum commented Jun 23, 2024

Description

자음과 모음이 문자로서 조합이 가능한지 검사하는 함수

Possible Solution

/**
 * 한글 문자열중 자음과 모음이 분리되어있다면 문자로 조합 가능한지검사하는 함수
 * @param hangulText 변환하고자 하는 한글 텍스트.
 * @returns boolean
 */
function testPossibleCharacter(hangulText: string): string[] {
    return boolean; //  '나ㄴ' -> true, '나ㅏ' -> false
}

etc.

예상 사용 사례

문자가 깨져있을때 자동으로 조합해주는 기능 구현에 도움,
어떤문자를 의도한건지 검사하는 기능구현에 도움,

@wet6123
Copy link

wet6123 commented Jun 29, 2024

안녕하세요!
이거 제가 작업해봐도 될까요?

@wet6123
Copy link

wet6123 commented Jul 2, 2024

@ienrum
이슈 작업중에 궁금한 점이 생겼는데
'가ㄴㅏㅏㅏ' 케이스 처럼 조합 한 뒤에도 자모음이 남아 있으면 이건 어떻게 처리하면 더 좋을까요?
일단 저는 한번이라도 조합이 일어나면 true로 처리하려고 했는데 어떻게 구현하면 좋을지 고민이 되네요.

@ienrum
Copy link
Author

ienrum commented Jul 3, 2024

먼저 해당 이슈를 제대로 생각하지 않고 판 것 같아 죄송하게 생각합니다.. 제 이슈를 구현해주셔서 감사합니다. 열심히 해주셨는데 수정 사항이 생길 것 같습니다..

이 함수의 목적을 고려해본 결과, 단순히 boolean 값을 반환하는 함수는 결국 조합 가능한 문자열의 존재 여부를 확인하는 것이라고 생각합니다 (예: string 배열의 길이가 0보다 큰지 여부). 즉, 이 함수는 문자열이 깨졌을 때 자동으로 조합해주는 기능을 구현하거나, 의도한 문자열이 맞는지를 확인하는 기능을 수행할 수 있을 것입니다.

그러나 이러한 목적을 보다 잘 수행하기 위해서는 boolean 값을 반환하는 것보다는 모든 가능한 조합을 담은 string 배열을 반환하는 것이 더 적합할 것으로 생각됩니다.

요약하면, 함수의 목적과 관련하여 boolean 반환 대신 모든 조합 가능한 문자열을 string 배열로 반환하는 것이 더 적합할것 같습니다.

말씀 주신 '가ㄴㅏㅏㅏ' 케이스는 ['가나','간','간아'] 를 리턴 하면 좋을 것 같습니다.

이런 방향으로 구현하는 것 에 대해 어떻게 생각하실까요?!

혹시 다른 의견 있으시면 얘기해주세요!

@KNU-K
Copy link
Contributor

KNU-K commented Jul 4, 2024

@ienrum
말씀 주신 '가ㄴㅏㅏㅏ' 케이스는 ['가나','간','간아'] 를 리턴 이라고 하셨는데, 가능한 모든 경우의 조합을 return 해주는 곳에
"간아"가 나오는 경우가 이해가 되지않아서 질문드립니다.

@ienrum
Copy link
Author

ienrum commented Jul 5, 2024

@KNU-K
“간아” 는 ㅏ-> 아 로 변환해주어야 한다고 생각해서 추가한것같습니다.

“간아”는 단순히 문자 조합을 통해 깨진 글자를 재조합하는데 목적을 둔 함수라면, 필요하지 않을것 같습니다.! (맞춤법/문법 교정X)

그래서 “간아” 는 조합에서 빼야할것 같습니다!

@KNU-K
Copy link
Contributor

KNU-K commented Jul 5, 2024

@ienrum 아 이해했습니다

@wet6123
Copy link

wet6123 commented Jul 6, 2024

답변해주신 내용 잘 읽었습니다. 해당 함수 구현에 대해서 생각해봤는데 아래와 같은 문제점이 있습니다.

  1. 모든 가능한 조합을 고려해야 하므로, 오타가 많아질수록 연산량이 급격히 증가합니다.

  2. "문자열에 자모가 발견된 경우 앞이나 뒤에 있는 자음, 모음, 합자와 조합한다" 라는 동작의 결과가 사용자가 실제로 의도한 조합과 일치하지 않을 수 있습니다.

성능적인 문제는 제외하더라도 함수의 결과값이 목적을 충족시키기 어렵다고 생각됩니다.
따라서 함수의 목적을 고려하여 문제를 재정의 해보면 좋을 것 같습니다.

또한 저는 기존의 "자음과 모음이 문자로서 조합이 가능한지 검사"하며 boolean을 리턴하는 함수가 es-hangul에서 더 유용하게 사용될 수 있을 것 같다고 생각합니다.
es-hangul에는 인자로 받은 배열에 담긴 한글 문장을 한글 규칙에 맞게 합성해주는 assemble 이라는 함수를 사용해야할지 확인하는 용도로 적절한 것 같습니다.

@ienrum
Copy link
Author

ienrum commented Jul 6, 2024

@wet6123

확실히 모든 가능한 조합을 고려해야 하다 보니 생각 해야 할게 많아지는군요..

말씀 주신 assemble 사용 해야 할지 확인, 혹은 단순 깨짐 검사로도 유용하게 사용할 수 있을 것 같네요.!

그러면 함수 목적을 "자음과 모음이 문자로서 조합이 가능한지 검사" 하는 용도로 구현해주시면 감사하겠습니다!🙏

@okinawaa
Copy link
Member

좋은 이슈레이징 감사합니다.
현재 제공해주신 함수의 방향성은 고수준 API이고, 문장만 집어넣으면 함수가 알아서 모든 걸 처리해주는 형태라고 생각합니다.
이것이 개발자의 비즈니스 요구사항을 정확히 만족한다면 괜찮겠지만, 조금이라도 다른 요구사항을 원하는 개발자는 아예 이 함수를 사용할 수 없을것이라고 생각합니다.

정말 자음 한개 모음 한개 를받아서 이것이 조합가능한지 여부를 반환하는 함수정도면 적절할 것 같은데, 이것 또한 es-hangul에서 제공해주는 몇가지 API를 사용하여 사용자가 자체 구현할 수 있지 않나라고 생각합니다.

정말로 이 이슈에 해당하는 요구사항이 대다수의 개발자의 비즈니스의 요구를 만족시킬 수 있는지 의문입니다.

@ienrum
Copy link
Author

ienrum commented Jul 17, 2024

@okinawaa 저도 주신 의견에 동의합니다.
@wet6123 의견 이 궁금합니다!

@wet6123
Copy link

wet6123 commented Jul 17, 2024

@okinawaa @KNU-K
es-hangul의 논의 사항에 대해서 잘 읽어보았습니다.
현재 만들어진 함수는 입력된 string을 assemble로 재조합 할 수 있는지 여부를 리턴하는 정도라고 생각하면 될 것 같습니다.
저도 해당 기능이 많이 사용되기 어렵다고 생각해서 아쉽지만 병합하지 않는게 더 올바른 방향인 것 같습니다.

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

4 participants