[NLP]. 오타 생성기 만들기 : Text Noise Augmentation

jongmin-oh·2022년 11월 10일

오타 생성기 아이디어

오타는 누르고자 하는 것을 잘못 눌렀을때 발생한다.

누르고자 하는 글자 주변(키보드)단어들을 랜덤으로 섞어주면 오타 생성기가 만들어지지 않을까?


오타 발생 유형

  1. 주변 키보드 문자를 잘못 입력함.

  2. 쌍자음으로 잘못 입력함.

  3. 한영키를 잘못누름


오타 사전 작성

typos_dict = {'ㅂ' : [ 'ㅈ','ㅁ','1','2','q','ㅃ'],
              'ㅃ' : ['ㅂ'],
              'ㅉ' : ['ㅈ'],
              'ㄸ' : ['ㄷ'],
              'ㄲ' : ['ㄱ'],
             'ㅈ' : ['2','3','ㅂ','ㄷ','ㅁ','ㄴ','ㅇ','w','ㅉ'],
             'ㄷ' : ['ㅈ','3','4','ㄱ','ㄴ','ㅇ','e','ㄸ'],
             'ㄱ' : ['ㄷ','4','5','ㅅ','ㅇ','ㄹ','r','ㄲ'],
             'ㅅ' : ['ㄱ','5','6','ㅛ','ㄹ','ㅎ','t','ㅆ'],
             'ㅁ' : ['ㅂ','ㅈ','ㄴ','ㅋ','a'],
             'ㄴ' : ['ㅁ','ㅈ','ㄷ','ㅇ','ㅋ','ㅌ','s'],
             'ㅇ' : ['ㄴ','ㄷ','ㄱ','ㄹ','ㅌ','ㅊ','d'],
             'ㄹ' : ['ㅇ','ㄱ','ㅅ','ㅎ','ㅊ','ㅍ','f'],
             'ㅎ' : ['ㄹ','ㅅ','ㅛ','ㅗ','ㅍ','ㅠ','g'],
             'ㅋ' : ['ㅁ','ㄴ','ㅊ','z'],
             'ㅌ' : ['ㅋ','ㄴ','ㅇ','ㅊ','x'],
             'ㅊ' : ['ㅌ','ㅇ','ㄹ','ㅍ','c'],
             'ㅍ' : ['ㅊ','ㄹ','ㅎ','ㅠ','v'],
             'ㅛ' : ['ㅅ','6','7','ㅕ','ㅎ','ㅗ','y'],
             'ㅕ' : ['ㅛ','7','8','ㅑ','ㅗ','ㅓ','u'],
             'ㅑ' : ['ㅕ','8','9','ㅐ','ㅏ','ㅓ','i'],
             'ㅐ' : ['ㅒ','ㅑ','9','0','ㅔ','ㅣ','ㅏ','o'],
             'ㅒ' : ['ㅐ'],
             'ㅔ' : ['ㅐ','0','ㅣ','ㅖ','p'],
             'ㅖ' : ['ㅔ'],
             'ㅗ' : ['ㅎ','ㅛ','ㅕ','ㅓ','ㅠ','ㅜ','h'],
             'ㅓ' : ['ㅗ','ㅕ','ㅑ','ㅏ','ㅜ','ㅡ','j'],
             'ㅏ' : ['ㅓ','ㅑ','ㅐ','ㅣ','ㅡ','k'],
             'ㅣ' : ['ㅏ','ㅐ','ㅔ','l'],
             'ㅠ' : ['ㅍ','ㅎ','ㅗ','ㅜ','b'],
             'ㅜ' : ['ㅠ','ㅗ','ㅓ','ㅡ','n'],
             'ㅡ' : ['ㅜ','ㅓ','ㅏ','m'],
             '?' : ['/'],
             '!' : ['1'],
             ' ' : [' '],
             'ㅢ' : ['ㅢ']}


구현하기

랜덤으로 교체해주는 함수 구현

def generate_noise(sentence,mod_num):
    jamo = list(split_syllables(sentence))

    choice_idx = random.sample(range(1,len(jamo)),mod_num)
    choice_char = [jamo[choice_idx[0]],jamo[choice_idx[1]],jamo[choice_idx[2]]]

    jamo[choice_idx[0]] = random.choice(typos_dict[choice_char[0]])
    jamo[choice_idx[1]] = random.choice(typos_dict[choice_char[1]])
    jamo[choice_idx[2]] = random.choice(typos_dict[choice_char[2]])

    return join_jamos(''.join(jamo))

** mod_num : 바꿀 자모 수

생성하기

for i in range(10):
    print(generate_noise("저희 초면인가요? 반갑습니다" , 3))

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

0개의 댓글