페르소나가 있는 답변(별칭, 애칭) 제거하기
alias.py
from typing import List, Union
from tqdm import tqdm
famliy_alias = ["엄마", "아빠", "오빠", "언니", "누나"]
couple_alias = ["자기", "자깅","여보", "여봉"]
class AliasToBlank:
def fit(self, X, y=None, **fit_params):
return self
def clean(self, text: str, alias: List[str], n_limit: int = 4) -> Union[str, None]:
"""
텍스트에서 주어진 별칭(alias)에 해당하는 단어를 제거하는 함수
Args:
text (str): 처리할 텍스트
alias (List[str]): 제거할 별칭(alias) 리스트
Returns:
str: 별칭이 제거된 텍스트
None
Examples:
# 별칭이 1개일 경우 AND 별칭이 포함된 글자 수가 n_limit 이하일 경우 해당 별칭만 제거
>>> alias = ["자기", "여보"]
>>> text = "오늘 자기 바빴엉? 피곤하면 델러갈까~?"
>>> output : "오늘 바빴엉? 피곤하면 델러 갈까~?"
# 별칭이 2개 이상일 경우 or 별칭이 포함된 글자 수가 n_limit 초과일 경우 전체 제거(빈 문자열 반환)
>>> case1 = "여보오면 내가 나가도 되구"
>>> case2 = "자기가 저번에 했던거 같은데 자기 기억나?"
>>> output : None
"""
words = text.split()
blank = [w for w in words for t in alias if t in w and t != "갑자기"]
length = sum(len(w) for w in blank)
if length == 0:
return text
elif length <= n_limit and len(blank) == 1:
return " ".join(text.replace(blank[0], "").split())
else:
return None
def transform(self, X, **transform_params) -> List[Union[str, None]]:
alias = famliy_alias + couple_alias
cleaned_X = [self.clean(i, alias, n_limit=2) for i in tqdm(X)]
return cleaned_X
main.py
import pandas as pd
from sklearn.pipeline import Pipeline
from alias import AliasToBlank
if __name__ == "__main__":
df = pd.read_parquet("./data/{data_path}", columns=['sentence'])
cleansing_pipeline = Pipeline([
('alias_blank', AliasToBlank()),
],verbose=1)
df['sentence'] = cleansing_pipeline.fit_transform(df['sentence'])
df = df.dropna(subset=['sentence'])
df = df.reset_index(drop=True)