Aspect를 추출하기 위한 작업 전에 리뷰 데이터 특성을 반영하여 일부 전처리를 진행했다.
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가 될 만한 후보 단어들을 통계적으로 추출했던 과정을 포스팅할 예정이다.