더북(TheBook)

데이터셋으로 사용된 데이터는 앞에서 살펴보았듯이 영어와 프랑스어가 탭(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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.