알고리즘

6. 문자열 관리(re 모듈을 통한 전처리)

jwjwvison 2021. 8. 16. 21:10

https://leetcode.com/problems/most-common-word/

 

Most Common Word - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표 등) 또한 무시한다.

 

 이 문제는 re 모듈을 통한 전처리를 공부하기 딱 좋은 문제인것 같아서 포스팅 한다. 먼저 다음 코드를 보자.

print(re.sub(r'[^\w]',' ',paragraph))

 정규식에서 \w는 단어 문자를 뜻하며, ^는 not을 의미한다. 따라서 위 정규식은 단어 문자가 아닌 모든 문자를 공백으로 치환하는 역할을 한다. 이 출력값은 다음과 같다.

 이를 이용하고 리스트 컴프리헨션을 이용해 다음처럼 코드를 짤 수 있다.

words=[word for word in re.sub(r'[^\w]',' ',paragraph).lower().split() if word not in banned]

 문자열에 split() 함수를 적용하면 다음과 같이 띄어쓰기를 기준으로 한 단어씩 구분하여 리스트에 추가해준다.

print(re.sub(r'[^\w]',' ',paragraph).split())

 

위의 방법들과 리스트 컴프리헨션을 사용해 다음과 같이 코딩할 수 있다.

def mostCommonWord(paragraph,banned):
    words=[word for word in re.sub(r'[^\w]',' ',paragraph).lower().split() if word not in banned]

    counts=collections.Counter(words)

    return counts.most_common(1)[0][0]

참고로 Counter 객체의 most_common 함수 설명은 다음과 같다.