전처리 코드
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('완료')