-
Notifications
You must be signed in to change notification settings - Fork 3
/
tokenizer_methods.py
59 lines (44 loc) · 2 KB
/
tokenizer_methods.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from konlpy.tag import Mecab, Okt, Komoran, Hannanum, Kkma
from khaiii import KhaiiiApi
# 자모 분리 토크나이저
def jamo_split(word, end_char="_"):
CHOSUNGS = [u'ㄱ',u'ㄲ',u'ㄴ',u'ㄷ',u'ㄸ',u'ㄹ',u'ㅁ',u'ㅂ',u'ㅃ',u'ㅅ',u'ㅆ',u'ㅇ',u'ㅈ',u'ㅉ',u'ㅊ',u'ㅋ',u'ㅌ',u'ㅍ',u'ㅎ']
JOONGSUNGS = [u'ㅏ',u'ㅐ',u'ㅑ',u'ㅒ',u'ㅓ',u'ㅔ',u'ㅕ',u'ㅖ',u'ㅗ',u'ㅘ',u'ㅙ',u'ㅚ',u'ㅛ',u'ㅜ',u'ㅝ',u'ㅞ',u'ㅟ',u'ㅠ',u'ㅡ',u'ㅢ',u'ㅣ']
JONGSUNGS = [u'_',u'ㄱ',u'ㄲ',u'ㄳ',u'ㄴ',u'ㄵ',u'ㄶ',u'ㄷ',u'ㄹ',u'ㄺ',u'ㄻ',u'ㄼ',u'ㄽ',u'ㄾ',u'ㄿ',u'ㅀ',u'ㅁ',u'ㅂ',u'ㅄ',u'ㅅ',u'ㅆ',u'ㅇ',u'ㅈ',u'ㅊ',u'ㅋ',u'ㅌ',u'ㅍ',u'ㅎ']
TOTAL = CHOSUNGS + JOONGSUNGS + JONGSUNGS
result = []
for char in word:
character_code = ord(char)
if 0xD7A3 < character_code or character_code < 0xAC00:
result.append(char)
continue
chosung_index = int((((character_code - 0xAC00) / 28) / 21) % 19)
joongsung_index = int(((character_code - 0xAC00) / 28) % 21)
jongsung_index = int((character_code - 0xAC00) % 28)
chosung = CHOSUNGS[chosung_index]
joongsung = JOONGSUNGS[joongsung_index]
jongsung = JONGSUNGS[jongsung_index]
# 종성 범위 밖에 있는 것들은 end_char로 메꿔준다.
if jongsung_index == 0:
jongsung = end_char
result.append(chosung)
result.append(joongsung)
result.append(jongsung)
return "".join(result)
# khaiii
khaiii = KhaiiiApi()
def khaiii_tokenize(text):
tokens = []
for word in khaiii.analyze(text):
tokens.extend([str(m).split('/')[0] for m in word.morphs])
return tokens
# konlpy tokenizers
mecab = Mecab().morphs
okt = Okt().morphs
komoran = Komoran().morphs
hannanum = Hannanum().morphs # 오류 발생
kkma = Kkma().morphs
def space_tokenizer(text):
return text.split(' ')
def char_tokenizer(text):
return [t for t in text]