본문 바로가기

개발/Python

파이썬으로 gz 파일 열기(Helsinki eng-kor 파일 열기)

object.pouta.csc.fi/Tatoeba-Challenge-v2020-07-28/eng-kor.tar

위 링크에서 영어-한국어 번역 모델을 위한 데이터를 다운받을 수 있다.

학습용 영-한 pair가 379만여개

테스트용 pair는 2414개다.

다운을 받으면 학습용 데이터는 .gz 파일에 담겨있는데,

따라하는 튜토리얼에는 그런 게 없었다.. ㅜ ㅜ 

>> 해결

저 gz 파일을 한번씩 더 압축을 풀어줘야 합니다

그럼 이렇게 아름다운 src 파일이 나오니 

이걸로 진행하면 됩니다.

def prepare_translation_datasets(data_path):
    with gzip.open("train.trg.gz", mode="rt", encoding="utf-8") as f:
        korean_text = f.readlines()
        korean_text = [text.strip("\n") for text in korean_text]

    with gzip.open("train.src.gz", mode="rt", encoding="utf-8") as f:
        english_text = f.readlines()
        english_text = [text.strip("\n") for text in english_text]

    data = []
    for korean, english in zip(korean_text, english_text):
        data.append(["kor to eng", korean, english])
        data.append(["eng to kor", english, korean])

    train_df = pd.DataFrame(data, columns=["prefix", "input_text", "target_text"])

    with open("test.trg", "r", encoding="utf-8") as f:
        korean_text = f.readlines()
        korean_text = [text.strip("\n") for text in korean_text]

    with open("test.src", "r") as f:
        english_text = f.readlines()
        english_text = [text.strip("\n") for text in english_text]

    data = []
    for korean, english in zip(korean_text, english_text):
        data.append(["kor to eng", korean, english])
        data.append(["eng to kor", english, korean])

    eval_df = pd.DataFrame(data, columns=["prefix", "input_text", "target_text"])

    return train_df, eval_df

하지만 띄어쓰기가 매우 더러운데... 왜이러는걸까요...

 

열어도 한참 모드 오류나고 그랬음...

'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

이런 오류 나서 찾아보니, 일단 파이썬에서 gz 파일을 gzip 이라는 라이브러리로 읽을 수 있었다.

gzip.open의 mode="rt"는 텍스트 데이터임을 가르킨다.

import gzip

def prepare_translation_datasets(data_path):
    with gzip.open("train.trg.gz", mode="rt", encoding="utf-8") as f:
        korean_text = f.readlines()
        korean_text = [text.strip("\n") for text in korean_text]

    with gzip.open("train.src.gz", mode="rt", encoding="utf-8") as f:
        english_text = f.readlines()
        english_text = [text.strip("\n") for text in english_text]

    data = []
    for korean, english in zip(korean_text, english_text):
        data.append(["kor to eng", korean, english])
        data.append(["eng to kor", english, korean])

    train_df = pd.DataFrame(data, columns=["prefix", "input_text", "target_text"])

    with open("test.trg", "r", encoding="utf-8") as f:
        korean_text = f.readlines()
        korean_text = [text.strip("\n") for text in korean_text]

    with open("test.src", "r") as f:
        english_text = f.readlines()
        english_text = [text.strip("\n") for text in english_text]

    data = []
    for korean, english in zip(korean_text, english_text):
        data.append(["kor to eng", korean, english])
        data.append(["eng to kor", english, korean])

    eval_df = pd.DataFrame(data, columns=["prefix", "input_text", "target_text"])

    return train_df, eval_df

그럼 이렇게 758만줄....wow.... 의 데이터가 나온다.

 

내가 모은 넷플릭스 데이터 11만줄인데 쨉도 안돼.....

'개발 > Python' 카테고리의 다른 글

UnpicklingError: invalid load key, 'v'. 문제 해결  (0) 2021.04.27
파이썬 \u200b 제거  (0) 2021.04.26
f-string : 파이썬에서 문자열에 변수 넣어주기  (0) 2021.01.25
Enumerate 함수  (0) 2021.01.09
파이썬 =, == 차이  (0) 2020.12.20