가장 흔한 단어

JunHyeok Oh·2021년 5월 5일
0

Q: 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라.

조건: 대소문자 구분을 하지 않으며, 구두점 또한 무시한다.

ex) sentence = "He likes action movies , but he doesn't like fantasy movies."
banned = ["he"]
==> "movies"

리스트 컴프리헨션 , 정규표현식 사용

정규표현식

  • 정규표현식은 정규식이라고도 하며, 복잡한 문자열을 처리할 때 사용하는 방법입니다. python만의 함수는 아니고 문자열 처리에 자주 사용되는 방법입니다.

  • python에서 정규표현식은 re 모듈을 불러와서 진행하면 됩니다.

  • 정규표현식에서 메타문자의 이해와 활용이 중요합니다.

  • 정규표현식의 자세한 활용에 대해서는 새로운 포스트로 작성하겠습니다.

실행코드

import re
import collections

def mostCommonWord(paragraph):
    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]
sentence = "He likes action movies , but he doesn't like fantasy movies."
banned = ["he"]

mostCommonWord(sentence)

movies

결과해석

  • lower는 모든 문자열을 소문자로 바꿔주고, split()은 리스트에 단어 하나씩 구분해줍니다. 이를 통해 banned에 없는 단어들이 words 리스트에 저장되게 됩니다.

  • 함수의 첫번째 줄 코드에 re.sub( )를 이용해서 문자열을 처리한 것을 확인할 수 있습니다.

  • re.sub 는 정규표현식을 통해 원하는 문자열을 추출한 후 내가 원하는 문자열로 대체하는 메서드입니다.

  • 괄호 안의 첫 칸에 있는 r'[^\w]' 는 모든 문자와 숫자가 아닌 것에 매치를 시키겠다는 뜻입니다. \w는 [a-zA-Z0-9_] 와 같은 표현인데, [ ] 안에 있는 값들과 매치를 하겠다는 뜻입니다.

  • "-" 를 통해 연속적인 숫자를 쉽게 표현할 수 있고, "^"를 통해 [ ] 반대인 값을 매칭시킬 수 있습니다. (아닌 값을 매칭시킴)

  • 메타 문자인 문자 클래스( [ ] ) 앞에 r' 를 붙이는 이유는 raw string을 선언함으로써 백슬래시( \ )의 중복 사용을 하지 않을 수 있습니다.

    즉 paragraph에서 모든 숫자와 문자가 아닌 값을 ' '(공백) 으로 바꿔라~ 라는 뜻입니다!

  • 또한 Counter 모듈을 통해 가장 흔한 단어를 쉽게 도출했습니다. most_common(1) 을 통해 금지된 단어를 제외한 단어 중 가장 많이 나온[('moives',2)] 가 추출되고 [0][0] 을 통해 'movies'가 리턴됩니다.

  • 이처럼 파이썬은 간단한 문장들을 통해 복잡한 문제들을 해결할 수 있습니다!!

profile
Univ of Seoul , Statistics

0개의 댓글