[Research] Khaiii 토크나이저를 활용한 리뷰 데이터셋 구축 - 2. 전처리

Jonas M·2021년 8월 18일
0
post-thumbnail

Aspect를 추출하기 위한 작업 전에 리뷰 데이터 특성을 반영하여 일부 전처리를 진행했다.

고려사항

  1. 'BEST'로 시작하는 경우('BEST리뷰'는 앞에 'BEST'가 붙어서 크롤링되었다) -> review = review[4:] ('BEST'를 잘라주었다)
  2. 한글이 아예 없는 경우: drop. 한글이 아예 없이 영어나 이모티콘, 특수문자 등으로만 이뤄진 리뷰는 제거하였다.
  3. White space가 하나도 없는 경우: drop.
    ex) '10자10자10자'
  4. 눈에 띄는 뻔한 오타는 그대로 두기로 했다. 리뷰 특성상 그런 오타들이 많기 때문에, 종합적인 PLM을 구축하는 것이 아닌 리뷰에 맞는 모델을 만들 때는 그대로 학습시키는 편이 좋다고 생각했다.
    ex) 다자인->디자인

3번의 예시. 띄어쓰기가 하나도 없는 경우 아래의 일부와 같이 너무 성의 없이 작성된 리뷰가 자주 보였다. 띄어쓰기를 한번이라도 한 리뷰와 그렇지 않은 리뷰의 차이가 큰 편이라 생각했다. 아쉽지만 리뷰는 계속 스크래핑이 가능하니 기계적으로 모두 제거했다.

def preprocess(dic):
    new_dict = defaultdict(lambda: list())
    not_KOR = 0
    not_space = 0
    
    for i in range(len(dic['ratings'])):
        review = dic['reviews'][i]
        if not re.search('[가-힣]', review):
            not_KOR += 1
            continue # 한글이 없을 경우 제거
        if len(review.split())==1:
            not_space += 1
            continue # 띄어쓰기가 하나도 없을 경우 제거
        if review.startswith('BEST'): review=review[4:] # BEST로 시작할 경우 BEST를 제외
        new_dict['reviews'].append(review)
        new_dict['ratings'].append(dic['ratings'][i])
        new_dict['rebuys'].append(dic['rebuys'][i])
        new_dict['months'].append(dic['months'][i])
    
    print('한글이 없는 경우 {:,}개, 공백이 없는 경우 {:,}개 제거했습니다'.format(not_KOR, not_space))
    return new_dict

별점, 재구매, 한달사용기 여부를 당장은 필요하지 않을 수 있지만, 혹시 감성분석 용도로 데이터를 사용하거나 원래 리뷰와 재구매 리뷰의 차이 등에 대한 연구도 나중에 진행될 수 있으니 남겨두기로 했다.

전처리를 하며 염두에 두어야 할 점은, 단순히 리뷰만 남기거나 드롭하는 게 아니라 idx에 맞춰서 별점, 재구매, 한달사용 데이터셋에서도 같이 제거해줘야 한다는 것.

결과적으로 총 20만 개 중 약 1만 개 정도의 리뷰가 제거되었다. 다음에는 aspect가 될 만한 후보 단어들을 통계적으로 추출했던 과정을 포스팅할 예정이다.

profile
Graduate School of DataScience, NLP researcher

0개의 댓글