[KR_OCR] 한국어학습을 위한 라벨
라벨 값이 알파벳 대문자와 소문자로 구성된 영어와 달리 새로운 라벨이 필요
학습에 사용하는 데이터를 활용하여 Label_dictionary 생성
1. K-Sign Data(AI HUB)
지난번에 AI HUB에서 다운로드한 어노테이션을 활용하여 Dict 생성
1> K-Sign데이터로 GTUtility 객체 생성
from data_KSign import GTUtility
gt_util = GTUtility('data/K-Sign/HighQuality/', quality='high')
- 앞 포스팅에서 만든 GTUtility를 사용하여 객체 생성하기
2> 생성된 객체의 text값 가져오기
text = gt_util.text
- 생성 된 객체의 .text 안에 학습에 사용하는 이미지 데이터의 text값이 담겨져있다.
<가져온 text리스트의 상위 5개 확인>
3> 여러개의 리스트를 하나의 리스트로
from itertools import chain
text = list(chain(*text))
- 값을 처리하기 쉽게 하나의 리스트안에 담아준다
<text리스트의 상위 5개를 확인>
4> 사이킷 런의 라이브러리 사용
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(analyzer='char').fit(text)
- 위의 라이브러리를 사용하여 처리하면 리스트 안의 문자열에 대해 문자 단위로 잘라서 counting 한다
- vect의 vocabulary_의 keys() 값들 속에는 리스트 안에 있던 단어들이 char 형태로 들어가있다
< vect.vocabulary_의 keys>
5> dict_key 타입을 list로 변경
charset = list(vect.vocabulary_.keys())
- 딕셔너리 키들을 리스트 형태로 타입을 변경한다.
- 리스트 타입일 때 데이터를 더욱 쉽게 조작할 수 있다.
- 현재 charset안에는 한글 이외에 영어나 숫자 공백 등이 포함되어 있다.
6> 한글 딕셔너리 생성
import re
pattern = '[^가-힣]' #한글이 아닌 문자는 공백으로 바꿔준다
charset_dict = [re.sub(pattern, "", char) for char in charset]
- 정규표현식을 통해 한글이 아닌 모든 형태는 공백으로 변경한다.
- charset_dict에는 공백과 한글 데이터만 존재
7> charset_dict에서 공백 제거
charset_dict2 = [x for x in charset_dict if x!= '']
- 생성된 딕셔너리 리스트에서 공백을 제거하고 한글만 남겨서 새로운 변수에 담는다.
- len(charset_dict2)를 통해 딕셔너리의 갯수를 확인한다.
8> 리스트를 str 형태로 타입 변환
str = "".join(charset_dict2)
- 최종적으로 str에는 한글 데이터셋에 대한 라벨값들이 str타입으로 들어가있다.
<생성된 dict 확인하기>
2. 최종 py파일 생성
위에서 진행 한 과정을 하나의 .py 파일로 생성해서 언제든 사용하기 쉽게 저장.
ksign_utils.py
import json
import os
from data_KSign import GTUtility
from itertools import chain
from sklearn.feature_extraction.text import CountVectorizer
import re
import string
def getDict239():
gt_util = GTUtility('data/K-Sign/HighQuality/', quality='high')
text = gt_util.text
text = list(chain(*text))
vect = CountVectorizer(analyzer='char').fit(text)
charset = list(vect.vocabulary_.keys())
pattern = '[^가-힣]' #한글이 아닌 문자는 공백으로 바꿔준다
charset_dict = [re.sub(pattern, "", char) for char in charset]
ksign_dict = [x for x in charset_dict if x!= '']
ksign_dict = "".join(ksign_dict)
ksign_dict = ksign_dict + string.digits + ' _'
return ksign_dict
ksign_dict = getDict239()
- 최종 파일에는 0~9까지의 숫자와 CTC loss 계산을 위한 blank가 추가되어 들어간다.