전처리 코드

import pandas as pd
from tqdm import tqdm
import re
import argparse
from colors import Colors
import sys
import csv
import random

def punctuation(text):
    ending_word = [
        '까요',
        '니다',
        '든요',
        '고요',
        '세요',
        '아요',
        '어요',
        '에요',
        '예요',
        '봐요',
        '이요',
        '네요',
        '시죠',
        '가요',
    ]

    pattern = "(?<=" + "|".join(ending_word) + ")"

    text = re.sub(pattern, ".\\n", text)
    text = re.sub(r"\\n\\s+", "\\n", text)
    text = text.replace("안녕하십니까", "안녕하십니까?")
    text = text.replace("도와드릴까요.", "도와드릴까요?")
    text = text.replace("가능하실까요.", "가능하실까요?")
    text = text.replace("나요.", "나요?")
    
    return text

def remove_punctuation(text):
    text = text.replace(".", " ")
    text = text.replace(",", " ")
    text = text.replace("?", " ")
    text = text.replace('  ', ' ').replace('  ', ' ').replace('  ', ' ').replace('  ', ' ')
    
    text = re.sub(r"\\s+\\n", "\\n", text)
    text = re.sub(r"\\s+\\t", "\\t", text)
    
    return text

def clean(text):
    text = text.replace('\\\\n', '\\n')

    text = text.replace('(())', ' ')
    text = text.replace('%', ' ')
    text = text.replace(':', ' ')
    text = text.replace('\\"', '')

    text = text.strip()

    text = re.sub(r"^\\n(.)", r"\\1", text)
    text = re.sub(r"^[입습니다네아어. ]+\\n(.)", r"\\1", text)

    text = text.replace('티 비', '티비')
    text = text.replace('티 브이', '티비')
    text = text.replace('엘 지', '엘지')
    text = text.replace('lg', '엘지')
    text = text.replace('vip', '브이 아이 피')
    text = text.replace('<key>', ' ')
    text = text.replace('</key>', ' ')
    text = text.replace('<긍정>', ' ')
    text = text.replace('</긍정>', ' ')
    text = text.replace('<중립>', ' ')
    text = text.replace('</중립>', ' ')

    text = text.replace('<N>', random.choice(['홍길동', '김철수', '이영희']))
    text = text.replace('<T>', '공 일 공')
    text = text.replace('<A>', random.choice(['서울시', '경기도', '강원도']))
    text = text.replace('<ACC>', '공 일 이 삼 사')
    text = text.replace('<R>', '일 이 삼 사')
    text = text.replace('<C>', '골뱅이 네이버 닷 컴')
    text = text.replace('<D>', '이십 삼년 칠월')
    text = text.replace('<CAR>', '일 이 조 일 이 삼 사')
    text = text.replace('<CRN>', '에이 비 씨 일 이 삼 사')
    text = text.replace('<RN>', '에이 비 씨 일 이 삼 사')
    text = text.replace('<ON>', '백 십 이')
    text = text.replace('<OR>', '천 백 십 이')
    text = text.replace('<S>', random.choice(['신한카드', '국민카드']))

    text = text.replace('반 반갑', '반갑')
    text = text.replace('반갑습니다. \\n상담', '반갑습니다. 상담')
    text = text.replace('반갑습니다.\\n상담', '반갑습니다. 상담')    

    text = re.sub(r"([0-9])mm([가-힣 ])", r"\\1밀리미터\\2", text)
    text = re.sub(r"([0-9])cm([가-힣 ])", r"\\1센티미터\\2", text)
    text = re.sub(r"([0-9])m([가-힣 ])", r"\\1미터\\2", text)
    text = re.sub(r"([0-9])km([가-힣 ])", r"\\1킬로미터\\2", text)
    text = re.sub(r"([0-9])g([가-힣 ])", r"\\1그램\\2", text)
    text = re.sub(r"([0-9])kg([가-힣 ])", r"\\1킬로그램\\2", text)
    text = re.sub(r"([0-9])ml([가-힣 ])", r"\\1밀리리터\\2", text)
    text = re.sub(r"([0-9])l([가-힣 ])", r"\\1리터\\2", text)
    
    text = re.sub(r"([^a-z])lg", r"\\1엘지", text)
    text = re.sub(r"([^a-z])vip", r"\\1브이 아이 피", text)
    text = re.sub(r"([^a-z])as", r"\\1에이 에스", text)

    text = text.replace('a', '에이 ')
    text = text.replace('b', '비 ')
    text = text.replace('c', '씨 ')
    text = text.replace('d', '디 ')
    text = text.replace('e', '이 ')
    text = text.replace('f', '에프 ')
    text = text.replace('g', '쥐 ')
    text = text.replace('h', '에이치 ')
    text = text.replace('i', '아이 ')
    text = text.replace('j', '제이 ')
    text = text.replace('k', '케이 ')
    text = text.replace('l', '엘 ')
    text = text.replace('m', '엘 ')
    text = text.replace('n', '엔 ')
    text = text.replace('o', '오 ')
    text = text.replace('p', '피 ')
    text = text.replace('q', '큐 ')
    text = text.replace('r', '알 ')
    text = text.replace('s', '에스 ')
    text = text.replace('t', '티 ')
    text = text.replace('u', '유 ')
    text = text.replace('v', '브이 ')
    text = text.replace('w', '더블유 ')
    text = text.replace('x', '엑스 ')
    text = text.replace('y', '와이 ')
    text = text.replace('z', '제트 ')

    text = text.replace(' \\n ', '\\n')
    text = text.replace(' \\n', '\\n')
    text = text.replace('\\n ', '\\n')
    text = text.replace('\\n\\n', '\\n')

    text = text.replace('  ', ' ').replace('  ', ' ').replace('  ', ' ').replace('  ', ' ')

    text = text.strip()

    return text

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("--input_pathname", default='/home/ubuntu/takeover/text-analytics/data/lge_aicc_cc_category/aicc_category_0916_cc_corr_1001_SL_MORE20_test.tsv', type=str)
    parser.add_argument("--output_pathname", default='/home/ubuntu/takeover/text-analytics/data/lge_aicc_cc_category/test_cleansing.tsv', type=str)
    parser.add_argument("--header_title", default='stt_text', type=str)    

    args = parser.parse_args()

    print(f"Arguments: {args}")

    docs = pd.read_csv(args.input_pathname, sep='\\t')

    length = len(docs.index)
    header_title_index = list(docs.columns.values).index(args.header_title)

    with open(args.output_pathname, "w", newline='') as f:
        wr = csv.writer(f, delimiter="\\t")
        wr.writerow(list(docs.columns.values))

    for i in tqdm(range(length), bar_format='{l_bar}{bar:40}{r_bar}'):
        instance = docs.iloc[i]

        columns = list(instance)
        
        for i, column in enumerate(columns):
            if i == header_title_index:
                columns[i] = remove_punctuation(clean(column))
                columns[i] = columns[i].replace('\\n', '\\\\n')

        with open(args.output_pathname, "a", newline='') as f:
            wr = csv.writer(f, delimiter="\\t")
            wr.writerow(columns)

KIWI 문장 분리

from kiwipiepy import Kiwi
import pandas as pd
from tqdm import tqdm
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("--input_pathname", default='/home/ubuntu/takeover/text-analytics/data/lge_aicc_summarization/test_221101_3_221222_kiwi.tsv', type=str)
    parser.add_argument("--output_pathname", default='temp.tsv', type=str)
    parser.add_argument("--column_title", default='본문', type=str)
    
    args = parser.parse_args()

    print('시작')

    train = pd.read_csv(args.input_pathname, sep = "\\t")
    kiwi = Kiwi()

    for i in tqdm(range(len(train)), bar_format='{l_bar}{bar:40}{r_bar}'):
        train[args.column_title].iloc[i] = train[args.column_title].iloc[i].replace(" \\\\n", '\\n').replace("\\\\n ", '\\n').replace("\\\\n", '.').replace("..", '.').replace("?.", '?').replace(".?", '?').replace(".,", ',').replace(",.", ',')

    for i in tqdm(range(len(train)), bar_format='{l_bar}{bar:40}{r_bar}'):
        query = train[args.column_title].iloc[i]
        result = kiwi.split_into_sents(query)
        temp = []
        for j in range(len(result)):
            temp.append(result[j][0])
        train[args.column_title].iloc[i] = '\\\\n'.join(temp)

    train.to_csv(args.output_pathname, sep="\\t", index = False)
    
    print('완료')