데이터셋으로 사용된 데이터는 앞에서 살펴보았듯이 영어와 프랑스어가 탭(tab)으로 구성된 text 파일입니다. 따라서 데이터는 판다스(pandas)로 불러온 후 정규화해야 합니다.
코드 10-27 데이터 정규화
def normalizeString(df, lang):
sentence = df[lang].str.lower() ------ 소문자로 전환
sentence = sentence.str.replace('[^A-Za-z\s]+', ' ') ------ a-z, A-Z, …, ?, ! 등을 제외하고 모두 공백으로 바꿈
sentence = sentence.str.normalize('NFD') ------ 유니코드 정규화 방식
sentence = sentence.str.encode('ascii', errors='ignore').str.decode('utf-8') ------ Unicode를 ASCII로 전환
return sentence
def read_sentence(df, lang1, lang2):
sentence1 = normalizeString(df, lang1) ------ 데이터셋의 첫 번째 열(영어)
sentence2 = normalizeString(df, lang2) ------ 데이터셋의 두 번째 열(프랑스어)
return sentence1, sentence2
def read_file(loc, lang1, lang2):
df = pd.read_csv(loc, delimiter='\t', header=None, names=[lang1, lang2]) ------ ①
return df
def process_data(lang1,lang2): ------ 데이터셋 불러오기
df = read_file('../chap10/data/%s-%s.txt' % (lang1, lang2), lang1, lang2)
sentence1, sentence2 = read_sentence(df, lang1, lang2)
input_lang = Lang()
output_lang = Lang()
pairs = []
for i in range(len(df)):
if len(sentence1[i].split(' ')) < MAX_LENGTH and len(sentence2[i].split(' ')) < MAX_LENGTH:
full = [sentence1[i], sentence2[i]] ------ 첫 번째와 두 번째 열을 합쳐서 저장
input_lang.addSentence(sentence1[i]) ------ 입력(input)으로 영어를 사용
output_lang.addSentence(sentence2[i]) ------ 출력(output)으로 프랑스어를 사용
pairs.append(full) ------ pairs에는 입력과 출력이 합쳐진 것을 사용
return input_lang, output_lang, pairs