데이터셋을 살펴보던 중에 발견한 수정해야 할 점이다. 위 사진 속 문장은 내가 추출한 데이터셋에는 추가돼있지 않겠지만, 추가 된 데이터들 중에 &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
가 있는 데이터셋이 완성되었다! 다음 포스트에서는 이를 학습하여보자