golang native로 작성된 한글 분석 유틸리티 라이브러리 입니다. 기본적으로 ruby 'korean-string'라이브러리를 golang으로 포팅한 라이브러리 이며, 그 이외 한글 분석 유틸리티 도구들을 준비했습니다. 해당 도구는 한글검색에 사용되는 한글분석 유틸리티를 모아둘 예정입니다.
라이브러리의 코드는 bada-ie 님의 코드를 참고하여 구현하였으며, 자세한 한글 인코딩 관련 정보는 w3c-hangul-i18n에서 열람하실 수 있습니다.
package main
import (
"fmt"
"strings"
"github.com/daangn/gorean"
)
func main() {
s := " 똠빵각하 5ri구이- "
sk, err := gorean.Split(s, gorean.SplitOptBasic)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(sk)
// second parameter[onlyKorean]: gorean.SplitOptBasic
// [[ ] [ ] [ㄸ ㅗ ㅁ] [ㅃ ㅏ ㅇ] [ㄱ ㅏ ㄱ] [ㅎ ㅏ] [ ] [5] [r] [i] [ㄱ ㅜ] [ㅇ ㅣ] [-] [ ] [ ]]
// second parameter[onlyKorean]: gorean.SplitOptGetOnlyKorean
// [[ㄸ ㅗ ㅁ] [ㅃ ㅏ ㅇ] [ㄱ ㅏ ㄱ] [ㅎ ㅏ] [ㄱ ㅜ] [ㅇ ㅣ]]
}
var jt1 []string
var jt2 []string
for _, tokens := range sk {
// case: 1
if character, err := gorean.JoinTokens(tokens); err != nil {
fmt.Println(err)
/*
( ) has been out-ranged tokens for JoinKorean
( ) has been out-ranged tokens for JoinKorean
( ) has been out-ranged tokens for JoinKorean
(5) has been out-ranged tokens for JoinKorean
(r) has been out-ranged tokens for JoinKorean
(i) has been out-ranged tokens for JoinKorean
(-) has been out-ranged tokens for JoinKorean
( ) has been out-ranged tokens for JoinKorean
( ) has been out-ranged tokens for JoinKorean
*/
} else {
jt1 = append(jt1, character)
}
// case: 2
if gorean.IsAbleToComposeAlphabetsForSingleCharacter(tokens) {
character, _ := gorean.JoinTokens(tokens)
jt2 = append(jt2, character)
} else {
noneKoreanToken := gorean.FindNoneKoreanAlphabetsForSingleCharacter(tokens)
// you should write to something for exception existing none korean tokens
fmt.Printf("Error! positions [%v] at [%v]\n", tokens, noneKoreanToken)
/*
Error! positions [[ ]] at [[0]]
Error! positions [[ ]] at [[0]]
Error! positions [[ ]] at [[0]]
Error! positions [[5]] at [[0]]
Error! positions [[r]] at [[0]]
Error! positions [[i]] at [[0]]
Error! positions [[-]] at [[0]]
Error! positions [[ ]] at [[0]]
Error! positions [[ ]] at [[0]]
*/
}
}
fmt.Printf("jt1 output => %s\n", strings.Join(jt1, "")) // 똠빵각하구이
fmt.Printf("jt2 output => %s\n", strings.Join(jt2, "")) // 똠빵각하구이
if edgeNGram, err := gorean.GenerateEdgeNGramTokens(s); err != nil {
fmt.Println(err)
} else {
fmt.Println(edgeNGram)
/*
// Warning: Including whitespace each items at []string, It didn't Trim
[ ㄷ ㄸ 또 똠 똠ㅂ 똠ㅃ 똠빠 똠빵 똠빵ㄱ 똠빵가 똠빵각 똠빵각ㅎ 똠빵각하 똠빵각하 똠빵각하 5 똠빵각하 5r 똠빵각하 5ri 똠빵각하 5riㄱ 똠빵각하 5ri구 똠빵각하 5ri궁 똠빵각하 5ri구ㅇ 똠빵각하 5ri구이 똠빵각하 5ri구이- 똠빵각하 5ri구이- 똠빵각하 5ri구이- ]
*/
}
messKoreanSort := []string{
"하기스",
"김치볶음밥",
"사자왕왕",
"자루소바오이시",
"왕초",
"밥상머리",
"까치꾸치",
"마장동",
"동백",
}
gorean.Sort(messKoreanSort, gorean.SortOptAsc)
fmt.Println(messKoreanSort) // [김치볶음밥 까치꾸치 동백 마장동 밥상머리 사자왕왕 왕초 자루소바오이시 하기스]
koreanWithEnglish := "초성퀴즈 with English"
korean := gorean.Korean(koreanWithEnglish, 10)
fmt.Println(korean) // 초성퀴즈
chosung, _ := gorean.Chosung(strings.Join(korean, " "))
fmt.Println(strings.Join(chosung, "")) // ㅊㅅㅋㅈ
}
- func gorean.Split([]string, SplitOpt)
- type SplitOpt gorean.SplitOptBasic
- type SplitOpt gorean.SplitOptGetOnlyKorean
- func gorean.JoinTokens([]string) // 2 <= len(ary) <= 3
- func gorean.IsAbleToComposeAlphabetsForSingleCharacter([]string) // 2 <= len(ary) <= 3
- func gorean.FindNoneKoreanAlphabetsForSingleCharacter([]string) // 2 <= len(ary) <= 3
- func gorean.GenerateEdgeNGramTokens(string)
- func gorean.Sort([]string, SortOpt)
- type SortOpt gorean.SortOptAsc
- type SortOpt gorean.SortOptDesc
- 입력값으로 장문의 문자열을 받을 수 있으며, 각각 한글자에 따른 2개~3개의 elements로 되어있는 자모 배열이 나오게 되며, 결과값은 이중배열이 나오게 된다.
- 입력값으로 주어질 배열 2개~3개의 string들이 되어있는 배열을 조합해서 하나의 한글 조합문자열을 만든다.
- 입력값으로 주어질 배열 2개~3개의 string들이 되어있는 배열이 한국어 조합글자가 될 수 있는지 에 대한 검증코드
- 디버깅 목적으로 만듬, JoinTokens를 하기 이전에 체크해보고 넘어 가라고 만듬
- 입력값으로 주어질 배열 2개~3개의 string들이 되어있는 배열에 한글 자모가 아닌 글자가 포함되어있는지 확인하는 디버깅 코드
- 디버깅 목적으로 만듬, IsAbleToComposeAlphabetsForSingleCharacter에서 false일 때에 사용하도록 의도
- 한글 EdgeNGram 및 전방일치 토크나이저를 얻기위해 만듬
- 강남역 => [ㄱ,가,강,강ㄴ,강나,강남,강남ㅇ,강남여,강남역]
- 문자열 정렬을 위해 존재함. 정렬의 다양한 옵션 제공
v0.0.5
[Latest Release]- 기능추가 초성 얻기,
Chosung()
- 기능추가 한글 찾기,
Korean()
- 기능추가 초성 얻기,
v0.0.6
[ToDo]- 기능추가 영어자판 to 한글
- 기능추가 한글자판 to 영어자판
v0.0.7
v0.1.1
[ToDo]- benchmark 검증 및 성능 최적화
- @drake-jin 은 부족한게 많습니다. 피드백은 언제나 환영이에요.
- 뭔가 추가 해줬으면 하는게 있거나, 변경했으면 하는게 있으면 언제든지 이슈 및 PR 보내주세요. 특별한 일 없으면 2일안에 반영해드릴게요.
만약 이 라이브러리 daangn/gorean을 잘 사용하셨다면...
- GitHub Star
- 이직각을 재고 계시다면 🥕당근마켓🥕