정규표현식을 활용한 데이터 정제

강태원·2023년 12월 2일
1

데이터셋

데이터셋 정제 - 2

데이터셋을 살펴보던 중에 발견한 수정해야 할 점이다. 위 사진 속 문장은 내가 추출한 데이터셋에는 추가돼있지 않겠지만, 추가 된 데이터들 중에 &name2&, (()), {의성어}, -단어-가 들어있지 않다는 확신이 없다. 따라서 이를 정규표현식으로 제거해보도록 하겠다.

import re

step1 = re.compile(r'&\w+&')
step2 = re.compile(r'\(*\)')
step3 = re.compile(r'\{[^}]*\}')
step4 = re.compile(r'\-[^}]*\-')

#예시 문장
text1 = "&name2& 님은 뭐~ {laughing} (()) 힘들 때 -위- 위로가 되어 준 노래 같은 게 있으신가요?"
text2 = "어~ {반가움} &name123&! (()) 반갑고 ㅋㅋ -오- 오랜만이다"

# 무식해보이지만 일단 확인해보자!
for text in [text1,text2]:
    after_step1=step1.sub('',text)
    after_step2=step2.sub('',after_step1)
    after_step3=step3.sub('',after_step2)
    after_step4=step4.sub('',after_step3)
    
    print(f"Text : {text}")
    print(f"Step 1 : {after_step1}")
    print(f"Step 2 : {after_step2}")
    print(f"Step 3 : {after_step3}")
    print(f"Step 4 : {after_step4}")
    print("\n\n")

자 이제 데이터프레임을 순회하면서 데이터셋을 정제해주도록 하자!


import pandas as pd
import re

df = pd.read_csv(f'data.tsv',sep='\t')

# data.tsv를 불러왔더니 nan 값이 들어있어 일단 삭제해줬다.
df = df.dropna()

# 아까 지정해뒀던 정규표현식들
step1 = re.compile(r'&\w+&')
step2 = re.compile(r'\(*\)')
step3 = re.compile(r'\{[^}]*\}')
step4 = re.compile(r'\-[^}]*\-')


def make_cleaned_text(text):
    after_step1=step1.sub('',text)
    after_step2=step2.sub('',after_step1)
    after_step3=step3.sub('',after_step2)
    after_step4=step4.sub('',after_step3)

    return after_step4

for idx, row in df.iterrows():
    df.at[idx, '사투리'] = make_cleaned_text(row['사투리'])
    df.at[idx, '표준어'] = make_cleaned_text(row['표준어'])

df.to_csv('data_fixed.tsv',sep='\t')

이 작업까지 완료하고나니 약 367500개 정도의

"표준어" : "사투리" 1대1 대응 row

가 있는 데이터셋이 완성되었다! 다음 포스트에서는 이를 학습하여보자

profile
가치를 창출하는 개발자! 가 목표입니다

0개의 댓글