-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path코드분석 1- 한글처리 알고리즘
32 lines (25 loc) · 1.49 KB
/
코드분석 1- 한글처리 알고리즘
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
29
30
31
32
코드분석 1
-한글처리 알고리즘 코딩하기
한국어 처리를 위해서 가장 먼저 해야하는 일 -1. 음절 글자를 음소단위로 쪼개는 것(자소 단위까지 쪼개지 않고도 형태소 분석을 할 수 있지만, KIWI 개발자는 Trie를 사용하기 위해서 자소 단위까지 분리한것으로 보임)
코드 ->
string splitJamo(wstring hangul)
{
static char choTable[] = { 1, 2, 4, 7, 8, 9, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 };
static char jongTable[] = { 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30 };
string ret;
for (auto c : hangul)
{
auto t = c - 0xAC00;
int jong = t % 28;
int jung = (t / 28) % 21;
int cho = (t / 28 / 21);
ret.push_back(choTable[cho]);
ret.push_back(jung + 31);
if (jong) ret.push_back(jongTable[jong - 1]);
}
return move(ret);
}
출처: https://bab2min.tistory.com/561?category=686456 [나의 큰 O는 logx야..]
코드 설명->
ㄱ, ㄴ, ㄷ, ㄹ, ....,ㅎ 과 ㅏ, ㅑ, ㅓ, ㅕ, ..., ㅣ의 모든 자소 글자를 1~51까지의 코드에 대응시킴. 그리하여 모든 한국어 단어는 1~51사이의 코드의 연속으로 표현이 가능하다.
(*참고; 코드에서 보이는 0xAC00과 그 밑으로 나오는 연산들은 한글 유니코드값을 사용하는 방법이다. '한글 유니코드 값 사용하기.md'와 '한글 유니코드표.png' 참조하면 쉽게 알수 있다.)