boostcampaitech2 / klue-level2-nlp-02

klue-level2-nlp-02 created by GitHub Classroom
0 stars 6 forks source link

전처리 함수를 만들어 봤습니다. #13

Open sangHa0411 opened 3 years ago

sangHa0411 commented 3 years ago

피어세션 때 말씀 나눈 전처리에 대해서 고민해보면서 2가지 실습을 해봤습니다.

1. 괄호가 있으면 해당 괄호 주위에 띄어쓰기를 넣었습니다.

def add_space(match) :
    bracket = match.group()
    added = ' ' + bracket + ' '
    return added
p = re.compile(r'[\([)\]]')
p.sub(add_space, test_sen)

출력 결과입니다.

적용 전
1. '균일가 생활용품점 (주)아성다이소(대표 박정부)는 코로나19 바이러스로 어려움을 겪고 있는 대구광역시에 행복박스를 전달했다고 10일 밝혔다.'
2. "(하지만 결국 크립토 나이트를 가진 배트맨의 승리로 끝난다. 이 코믹스는 [배트맨 대 슈퍼맨: 저스티스 리그의 시작]의 원작이다.) 슈퍼맨과 배트맨의 이런 관계는 애니메이션 Batman Beyond까지 이어져서, 테리 맥기니스(배트맨)는 브루스 웨인(배트맨)에게서 그린 크립토나이트를 물려받는다."

적용 후
1. '균일가 생활용품점  ( 주 ) 아성다이소 ( 대표 박정부 ) 는 코로나19 바이러스로 어려움을 겪고 있는 대구광역시에 행복박스를 전달했다고 10일 밝혔다.'
2. ' ( 하지만 결국 크립토 나이트를 가진 배트맨의 승리로 끝난다. 이 코믹스는  [ 배트맨 대 슈퍼맨: 저스티스 리그의 시작 ] 의 원작이다. )  슈퍼맨과 배트맨의 이런 관계는 애니메이션 Batman Beyond까지 이어져서, 테리 맥기니스 ( 배트맨 ) 는 브루스 웨인 ( 배트맨 ) 에게서 그린 크립토나이트를 물려받는다.'

2. 독일어만 제외하기

# 독일어가 있는 entity를 파악했습니다. (다른 데이터가 더 있는지는 잘 모르겠습니다ㅠㅠ)
word_list = ['RÚV',
             'Hermann Müller',
             'française',
             'Dieter Hoeneß',
             'Christa Päffgen',
             'Marcelino García Toral',
             'Marco Wölfli',
             'Víctor Ruiz Torre',
             'FC Südtirol',
             'ÖBB',
             'David Jarolím',
             'Håvard Nordtveit',
             'RÚV',
             'Jürgen Kohler',
             'Club Sport Marítimo',
             'Samuel Rosa Gonçalves',
             'Real Madrid Club de Fútbol',
             'Mustafa Kemal Atatürk']

# Tokenizer를 통해서 어떻게 변형되는지 실험을 해봤습니다.
MODEL_NAME = "monologg/koelectra-base-v3-discriminator"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
for word in word_list :
    tok_list = tokenizer.tokenize(word)
    print(word + ' -> ' + str(tok_list) + '\n')

tokenize 결과입니다. 하나의 단어 안에 독일어 글자가 하나라도 있는 경우는 대부분 UNK로 변환되는 것을 확인할 수 있었습니다.

RÚV -> ['[UNK]']
Hermann Müller -> ['Her', '##mann', '[UNK]']
française -> ['[UNK]']
Dieter Hoeneß -> ['Die', '##ter', '[UNK]']
Christa Päffgen -> ['Christ', '##a', 'P', '##ä', '##ff', '##ge', '##n']
Marcelino García Toral -> ['Mar', '##ce', '##lin', '##o', '[UNK]', 'To', '##ral']
Marco Wölfli -> ['Mar', '##co', 'W', '##ö', '##l', '##fl', '##i']
Víctor Ruiz Torre -> ['[UNK]', 'R', '##u', '##iz', 'To', '##r', '##re']
FC Südtirol -> ['FC', '[UNK]']
ÖBB -> ['[UNK]']
David Jarolím -> ['David', '[UNK]']
Håvard Nordtveit -> ['[UNK]', 'No', '##r', '##d', '##t', '##ve', '##it']
RÚV -> ['[UNK]']
Jürgen Kohler -> ['[UNK]', 'K', '##oh', '##ler']
Club Sport Marítimo -> ['Cl', '##ub', 'Sp', '##ort', '[UNK]']
Samuel Rosa Gonçalves -> ['S', '##am', '##uel', 'R', '##os', '##a', '[UNK]']
Real Madrid Club de Fútbol -> ['Re', '##al', 'Ma', '##d', '##rid', 'Cl', '##ub', 'de', '[UNK]']
Mustafa Kemal Atatürk -> ['Mus', '##ta', '##f', '##a', 'K', '##em', '##al', '[UNK]']

아래의 정규표현식을 이용해서 독일어글자만 지웠습니다.

filtered_list = []
for word in word_list :
    filtered = re.sub('[À-ÿ]', '', word)
    filtered_list.append(filtered)
    print(filtered)

필터링 결과입니다.

RV
Hermann Mller
franaise
Dieter Hoene
Christa Pffgen
Marcelino Garca Toral
Marco Wlfli
Vctor Ruiz Torre
FC Sdtirol
BB
David Jarolm
Hvard Nordtveit
RV
Jrgen Kohler
Club Sport Martimo
Samuel Rosa Gonalves
Real Madrid Club de Ftbol
Mustafa Kemal Atatrk

최종적으로 위에 필터링된 단어를 tokenizer에 보냈을 때의 결과입니다.

RV -> ['R', '##V']
Hermann Mller -> ['Her', '##mann', 'M', '##ll', '##er']
franaise -> ['fr', '##ana', '##ise']
Dieter Hoene -> ['Die', '##ter', 'H', '##oe', '##ne']
Christa Pffgen -> ['Christ', '##a', 'P', '##ff', '##ge', '##n']
Marcelino Garca Toral -> ['Mar', '##ce', '##lin', '##o', 'G', '##ar', '##ca', 'To', '##ral']
Marco Wlfli -> ['Mar', '##co', 'W', '##l', '##fl', '##i']
Vctor Ruiz Torre -> ['V', '##ct', '##or', 'R', '##u', '##iz', 'To', '##r', '##re']
FC Sdtirol -> ['FC', 'S', '##d', '##t', '##ir', '##ol']
BB -> ['BB']
David Jarolm -> ['David', 'J', '##ar', '##ol', '##m']
Hvard Nordtveit -> ['H', '##v', '##ard', 'No', '##r', '##d', '##t', '##ve', '##it']
RV -> ['R', '##V']
Jrgen Kohler -> ['J', '##r', '##ge', '##n', 'K', '##oh', '##ler']
Club Sport Martimo -> ['Cl', '##ub', 'Sp', '##ort', 'Mart', '##im', '##o']
Samuel Rosa Gonalves -> ['S', '##am', '##uel', 'R', '##os', '##a', 'Go', '##na', '##l', '##ve', '##s']
Real Madrid Club de Ftbol -> ['Re', '##al', 'Ma', '##d', '##rid', 'Cl', '##ub', 'de', 'F', '##t', '##bo', '##l']
Mustafa Kemal Atatrk -> ['Mus', '##ta', '##f', '##a', 'K', '##em', '##al', 'A', '##ta', '##tr', '##k']
presto105 commented 3 years ago

크 최고십니다

sangHa0411 commented 3 years ago

감사합니다!