Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

빵공장

한글 자모 분리기 만들어 보기 본문

Golang

한글 자모 분리기 만들어 보기

sucream 2020. 9. 9. 03:17

한글에 사용하는 글자들 변수 미리 만들어 놓기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
package koreanutil
 
var BASECODE rune = '\uAC00'
 
//CHO 초성
var CHO = []string{"ㄱ""ㄲ""ㄴ""ㄷ""ㄸ""ㄹ""ㅁ""ㅂ""ㅃ""ㅅ""ㅆ""ㅇ""ㅈ""ㅉ""ㅊ""ㅋ""ㅌ""ㅍ""ㅎ"}
 
// JUNG 중성
var JUNG = []string{"ㅏ""ㅐ""ㅑ""ㅒ""ㅓ""ㅔ""ㅕ""ㅖ""ㅗ""ㅘ""ㅙ""ㅚ""ㅛ""ㅜ""ㅝ""ㅞ""ㅟ""ㅠ""ㅡ""ㅢ""ㅣ"}
 
// JONG 종성
var JONG = []string{"""ㄱ""ㄲ""ㄳ""ㄴ""ㄵ""ㄶ""ㄷ""ㄹ""ㄺ""ㄻ""ㄼ""ㄽ""ㄾ""ㄿ""ㅀ""ㅁ""ㅂ""ㅄ""ㅅ""ㅆ""ㅇ""ㅈ""ㅊ""ㅋ""ㅌ""ㅍ""ㅎ"}
 
cs

 

자모를 반환하는 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package koreanutil
 
import (
    "regexp"
)
 
// GetJamo 문장을 입력받아 자모 단위로 분리하여 반환
// 한글이 아닌 문자는 그대로 반환
func GetJamo(userInput string) [][]string {
    runeUserInput := []rune(userInput)
    var result [][]string
 
    ptnKorean := regexp.MustCompile(`[가-힣]`)
 
    for _, char := range runeUserInput {
        if !ptnKorean.MatchString(string(char)) {
            result = append(result, []string{string(char)})
            continue
        }
        choIdx := (char - BASECODE) / 21 / 28
        jungIdx := ((char - BASECODE) - (choIdx * 21 * 28)) / 28
        jongIdx := (char - BASECODE) - (choIdx * 21 * 28- (jungIdx * 28)
        result = append(result, []string{string(CHO[(char-BASECODE)/21/28]), string(JUNG[jungIdx]), string(JONG[jongIdx])})
    }
    return result
}
cs

 

사용해보기

 

1
2
3
4
5
6
7
8
9
10
11
12
package main
 
import (
    "fmt"
 
    "github.com/sucream/koreanutil"
)
 
func main() {
    fmt.Println(koreanutil.GetJamo("안hi녕하세世界요"))
    // [[ㅇ ㅏ ㄴ] [h] [i] [ㄴ ㅕ ㅇ] [ㅎ ㅏ ] [ㅅ ㅔ ] [世] [界] [ㅇ ㅛ ]]
}
cs

 

github.com/sucream/koreanutil

'Golang' 카테고리의 다른 글

Websocket을 이용하여 간단한 채팅 만들어 보기  (0) 2020.09.09
Comments