조건: 대소문자 구분을 하지 않으며, 구두점 또한 무시한다.
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'가 리턴됩니다.
이처럼 파이썬은 간단한 문장들을 통해 복잡한 문제들을 해결할 수 있습니다!!