[전처리].별칭,애칭 제거하기 (엄마,아빠,자기,여보)

jongmin-oh·2023년 6월 16일
0

페르소나가 있는 답변(별칭, 애칭) 제거하기

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)

profile
Technical Problem Solver (기술로 문제를 해결하는 사람)

0개의 댓글