Boostcamp AI Tech

[Boostcamp 과제 - 2, 3] Text Processing I, II

ju_young 2021. 8. 5. 00:40
728x90

Text Processing I

과제 2번은 string을 다루는 방법을 학습하는 목적으로 내었다고 한다.

Import

정규표현식을 사용하여 좀 더 간결한 코드를 구현하기위해 re를 import 하였다.

import re

normalize

먼저 입력받은 문자를 lower()함수를 사용하여 소문자로 만들고 strip()을 사용하여 양쪽의 공백을 제거하고 split()으로 공백을 기준으로 문자를 나누었다. 그 이후에 join을 사용하여 나누어진 문자를 모두 합쳤다. 여기서 strip()은 하지않아도 똑같은 결과가 나온다.

def normalize(input_string):
    return ' '.join(input_string.lower().strip().split())

no_vowels

해당 함수는 모든 모음(소문자, 대문자)를 제거시킨 문자열을 반환해야한다. 따라서 re의 sub()함수를 사용하여 모든 모음을 빈칸으로 치환시켜주는 식으로 간단하게 구현해주었다.

def no_vowels(input_string):
    no_vowel_string = re.sub('[aeiouAEIOU]', '', input_string)
    return no_vowel_string

Text Processing II

과제 3번도 2번에 이어서 string을 다루는 방법을 학습하는 목적으로 내었다고 한다.

Import

여기서도 정규표현식을 사용하기위해 re를 import 하였다.

import re

digits_to_words

입력받은 문자열에서 숫자만 추출하여 영어 단어로 변환하는 함수를 구현해한다. 구현은 다음과 같은 순서로 진행하였다.

  • 각 숫자에 맞는 문자를 딕셔너리 타입으로 생성
  • re의 sub()함수를 사용하여 숫자가 아닌 문자는 빈칸으로 치환
  • 만들어진 딕셔너리의 key값과 value값을 매치시켜 리스트에 추가
  • 문자로 변환된 값들이 들어가 있는 리스트를 join() 함수를 사용하여 합침
def digits_to_words(input_string):
    data = {'0': 'zero','1' : 'one', '2':'two', '3':'three', '4':'four', '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine'}
    digit_string = re.sub('\D', '', input_string)
    tmp = []
    for s in digit_string:
        if s in data:
            tmp.append(data[s])
    return ' '.join(tmp)

to_camel_case

간단히 설명하면 언더스코어가 없고 두 번째 단어부터 첫 번째 문자를 대문자로 바꾸로 모두 붙이는 함수이다. 일단 받은 문자열에 언더스코어가 없으면 그대로 반환해주는 예외처리를 해주고 다음과 같은 순서로 구현하였다.

  • lower()함수로 소문자로 변환
  • re의 findall()함수를 사용하여 단어들만 추출하여 리스트 타입으로 저장
  • 리스트에 아무것도 없으면 빈 문자열 반환
  • 먼저 첫 번째 단어를 출력값으로 지정
  • 두 번째 단어부터 맨 앞 문자를 대문자로 바꾸고 출력값에 차례대로 더해줌

이 때 맨 앞 문자를 대문자를 바꾸는 함수로 capitalize()를 사용할 수 있다.

def to_camel_case(underscore_str):
    #not exist underscore
    if '_' not in underscore_str:
        return underscore_str

    underscore_str = underscore_str.lower()
    camelcase_str = re.findall('[a-z]+', underscore_str)

    #empty
    if not camelcase_str:
        return ''

    output = camelcase_str[0]
    for cur_str in camelcase_str[1:]:
        output += cur_str.capitalize()
    return output
728x90