TIL#25 PYTHON 예제연습(2)

dnpxm387·2020년 8월 7일
0

python

목록 보기
20/43
post-thumbnail

가장 흔한 단어

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

입력
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
출력
"ball"

이번 문제 역시 70프로 정도만 맞아서 결론은 완성하지 못하였다😓 그래서 저번처럼 풀이를 보면서 공부하였다.

import collections
import re

def the_most_common(paragraph, banned):
    words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
        .lower().split() if word not in banned
            ]
    a = collections.Counter(words).most_common(1)
    return a[0][0]

이번 예제는 리스트컴프리헨션과 collections 모듈을 이용하여 푸는 문제였다. 예제를 보았을 때, collections 모듈을 이용하여 출력하는 부분은 바로 알았지만 (공부를 했던 부분이라서 ^^;) 리스트컴프리헨션은 아직도 어렵고 많이 연습해봐야 할 것 같다.

일단 입력해야 하는 문장을 데이터 클렌징Data Cleansing이라고 불리는 입력값에대한 전처리Preprocessing 작업을 해야한다.
-> 대소문자 구분을 하지 않기 때문에 전부 소문자로 변환하고, 구두점들을 없애고 금지된 단어를 제외한 단어 목록을 만든다.

여기에서도 앞예제에서 조금 살펴보았던 정규식이 나온다. \w 는 단어 문자를 뜻한다. 따라서 [^\w]는 모든 단어를 제외한 나머지 것들이 된다. [^\w]앞에 위치한 r' 는 안의 역슬래시 \ 를 문자로 인식하기 위해서이다. 파이썬의 역슬래시 문법과 겹치기 때문에 정규식 그대로 인식하기 위해서 쓴다고 한다.

그렇게 만들어진 단어목록 리스트를 Counter 함수를 이용해 많이 쓰여진 갯수 순서대로 딕셔너리가 만들어진다. 가장 흔하게 등장하는 단어 1개를 출력하는게 문제이기 때문에 most_common() 함수를 이용한다.

그렇게 해서 출력하면 [('ball', 2)] 이렇게 출력된다. 그래서 a의 0번째의 0번째 항을 출력해야 정확한 답이 된다.






<참고문헌>
박상길, '파이썬 알고리즘 인터뷰', 책만, 2020

profile
개발자꿈나무🌲

0개의 댓글