CraledTexts.csv 에 존재할 수 있는 중복된 메세지를 제거한다.
효과: 광고, 상업적 알바 글, 프로그램이 자동으로 작성한 글 등 불필요한 메시지 제거
아이디어: 과부하와 속도를 위해 메세지 전체를
비교하지 않고
첫 몇 글자를 비교해 특정수 이상 같다면 같은 메세지로 치부하고 제거한다.
필요 파일: 수집한 텍스트파일 CraledTexts.csv
def
Delete_Overlapped_Messages(Raw_Message, number_of_overlapped): # 인수로 Raw Message와 number_of_overlapped를 받습니다.
import pandas as pd
from tqdm import tqdm_notebook as
bar #
tqdm은 반복작업을 할 때 작업이 얼마나 걸릴지 bar progress로 보여주는 패키지입니다.
df = Raw_Message
# df라는 변수에 Raw Message를 저장해줍니다.
df_sorted =
df.sort_values(by="contents").reset_index(drop=True) # df 를 "contents" 컬럼을 기준으로 정렬하고
index를 초기화 해줍니다.
iterations = len(df_sorted)
# iteration은 tqdm의 범위를 설정하기 위해 df_sorted의 길이를 저장한 변수입니다.
row_num = 0
# 중복여부는 먼저 위아래 행의 앞 number_of_overlapped 만큼 비교해서 알아낸다.
deleted_messages = 0
# 얼마나 지웠는지 알기 위해 deleted_messages 라는 변수를 선언한다.
total = bar(range(iterations-1), desc =
"deleting")
# 0부터 (iteration-1)만큼 반복횟수를 설정해야 한다. (맨마지막 줄은 비교당하기만 하면 되니까)
for i in total:
step = i+1
# step으로 반복횟수를 나타낸다.
standard_row =
df_sorted.get_value(row_num, "contents") # row_num을 통헤 기준row를 설정하고 그 row의
"contents" 컬럼의 내용을 가져오고 standard_row라는 변수에 저장한다.
under_row =
df_sorted.get_value(row_num+1, "contents") # 기준row 바로 아래의 row의
"contents" 컬럼의 내용을 가져오고 under_row라는 변수에 저장한다.
if len(str(standard_row)) <
number_of_overlapped:
# 만약 기준 row의 길이가
number_of_overlapped 보다 작다면
standard_row_words =
standard_row
# 비교할 문자열을 standard_row라는 변수에 저장했던 문자열 전부를 할당시킨다.
else :
# 그렇지 않다면
standard_row_words =
str(standard_row)[:number_of_overlapped]
# standard_row라는 변수에 저장했던 문자열에서 number_of_overlapped만큼만을 할당시킨다.
if len(str(under_row)) <
number_of_overlapped: # 위 과정은 under_row도
동일하게 한다. (이 부분을 반복문으로 만들거나 다른 방식으로 해서 길이를 줄일 수 있을 것 같다.)
under_row_words = under_row
else :
under_row_words =
str(under_row)[:number_of_overlapped]
if standard_row_words ==
under_row_words: # 만약
standard_row_words와 under_row_words의 길이가 같다면,
df_sorted =
df_sorted.drop(row_num+1,0).reset_index(drop=True) # under_row를 drop하고 인데스를 초기화한다.
row_num = row_num
# row_num은 그대로 가져간다. (새로운 under_row와도 비교해야 하니까)
deleted_messages =
deleted_messages + 1 #
deleted_message의 수를 하나 증가시킨다.
else :
# 만약 standard_row_words와 under_row_words의 길이가 같지 않다면,
row_num = row_num+1
# 기준 줄을 다음 row로 넘기기 위해 row_num을 1 증가시켜준다.
output_df =
df_sorted.sort_values(by="date").reset_index(drop=True) # 최종적으로 정제된 데이터프레임인 df_sorted를 다시 date에 맞춰
정렬하고, 인덱스를 초기화해 output_df에 저장한다.
display(output_df.head())
# 산출물을 한번 보여주고
print(str(deleted_messages)+"
messages are deleted.") # 몇개가 지워졌는지 확인하도록
삭제한 메세지 수를 프린트하며
return output_df
# 산출물을 리턴한다.