Acdong
Learn by doing
Acdong
전체 방문자
오늘
어제
  • 분류 전체보기
    • Economy
      • Saving Money
    • Self-improvement
    • Thoughts
    • Machine learning
      • Deep Learning
      • Chatbot
      • NLP
    • MLops
      • AWS
      • Container
      • Serving
    • Computer Vision
    • Data Science
      • ADsP
      • R
    • Project
    • Python
      • Data Structure & Algorithm
    • C,C++
    • API
      • ElasticSearch
    • Error Note
    • Network
    • RDBMS
      • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • [GitHub]

인기 글

태그

  • Numpy
  • nlp
  • plot()
  • SentenceTransformer
  • 어텐션
  • 존댓말 반말 분류
  • 포인터
  • 데이터 전처리
  • 머신러닝
  • 회귀계수
  • pandas
  • Python
  • c포인터
  • R그래프
  • 이미지 전처리
  • R시각화
  • 기계학습
  • 다중공선성
  • sbert
  • R

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Acdong

Learn by doing

Machine learning/NLP

[NLP]. 오타 생성기 구현하기 : Text Noise Augmentation

2022. 10. 29. 15:25
728x90

 

오타 생성기 아이디어:

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

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

 

오타 발생 유형

 (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))

 

짠~

반응형
저작자표시 비영리 (새창열림)

'Machine learning > NLP' 카테고리의 다른 글

[NLP]. SentenceTransformer 모델 TensorFlow로 불러오기  (0) 2022.12.12
[NLP]. Sentence-Transformer 모델 onnx 형식으로 변환하기  (0) 2022.12.12
[NLP]. 챗봇 답변 Top-k sampling 구현  (0) 2022.09.27
[NLP]. 임베딩 벡터(embedding vector)를 문자열로 저장하는 방법(feat. byte type , base85 )  (0) 2022.06.21
[NLP]. 구어체(채팅)데이터에서 필요한 품사만 가져오기 (feat.꼬꼬마 형태소 분석기)  (0) 2022.03.04
    'Machine learning/NLP' 카테고리의 다른 글
    • [NLP]. SentenceTransformer 모델 TensorFlow로 불러오기
    • [NLP]. Sentence-Transformer 모델 onnx 형식으로 변환하기
    • [NLP]. 챗봇 답변 Top-k sampling 구현
    • [NLP]. 임베딩 벡터(embedding vector)를 문자열로 저장하는 방법(feat. byte type , base85 )
    Acdong
    Acdong
    E-mail : alswhddh@naver.com / 자연어처리와 MLops 를 연구하고 있는 스타트업 개발자입니다.

    티스토리툴바