collections.Counter는 리스트나 문자열과 같은 자료형의 요소 중 값이 같은 요소가 몇 개인지를 확인할 때 사용하는 클래스이다.
문제
다음은 김소월의 시 '산유화'이다. 잠시 여유를 갖고 감상해 보자.
산에는 꽃 피네.
꽃이 피네.
갈 봄 여름없이
꽃이 피네.
산에
산에
피는 꽃은
저만치 혼자서 피어있네.
산에서 우는 새여
꽃이 좋아
산에서
사노라네.
산에는 꽃지네
꽃이 지네.
갈 봄 여름 없이
꽃이 지네.
이 시에서 가장 많이 사용한 단어와 그 개수를 구하려면 어떻게 해야 할까?
풀이
이 문제를 해결하려면 이 시를 단어별로 나누고 딕셔너리를 사용하여 각 개수를 0으로 초기화하고 나서 해당 단어가 반복될 때마다 1씩 증가하여 빈도수를 알아내는 방법을 써야 한다.
하지만, 여기서는 더 쉬운 방법으로 이 문제를 풀어 보자.
[파일명: collections_counter_sample.py]
from collections import Counter
import re
data = """
산에는 꽃 피네.
꽃이 피네.
갈 봄 여름없이
꽃이 피네.
산에
산에
피는 꽃은
저만치 혼자서 피어있네.
산에서 우는 새여
꽃이 좋아
산에서
사노라네.
산에는 꽃지네
꽃이 지네.
갈 봄 여름 없이
꽃이 지네.
"""
words = re.findall(r'\w+', data)
counter = Counter(words)
print(counter.most_common(1))
먼저 문장을 단어별로 나누고자 다음처럼 re 모듈을 사용한다.
words = re.findall(r'\w+', data)
정규표현식 \w+는 단어를 의미하므로 re.findall() 함수를 이용하여 이 시의 모든 단어를 리스트(words)로 반환한다. 그런 다음, 다음처럼 이 words를 이용하여 collections.Counter 클래스의 객체 counter를 생성했다.
counter = Counter(words)
생성된 counter 객체를 print(counter)로 출력하면 다음과 같다.
Counter({'꽃이': 5, '피네': 3, '산에는': 2, '갈': 2, '봄': 2, '산에': 2, '산에서': 2, '지네': 2, '꽃': 1, '여름없이': 1, '피는': 1, '꽃은': 1, '저만치': 1, '혼자서': 1, '피어있네': 1, '우는': 1, '새여': 1, '좋아': 1, '사노라네': 1, '꽃지네': 1, '여름': 1, '없이': 1})
단어 빈도수가 큰 것부터 차례대로 출력한다. 하지만, 문제에서 바라는 것은 빈도수가 가장 많은 1개 단어이므로 Counter 객체의 most_common() 함수를 이용하여 다음과 같이 출력한다.
print(counter.most_common(1))
이 코드를 실행한 결과는 다음과 같다.
[('꽃이', 5)]
most_common() 함수는 빈도수가 많은 것부터 인수로 입력한 개수만큼 튜플로 반환한다. 빈도수가 많은 2개 단어를 보고 싶다면 다음과 같이 출력하면 된다.
print(counter.most_common(2))
출력 결과는 다음과 같을 것이다. 직접 실행하고 확인해 보자.
[('꽃이', 5), ('피네', 3)]
'Python > Python' 카테고리의 다른 글
파이썬 배포하기 (exe, 리소스폴더 포함 방법) (0) | 2022.12.27 |
---|---|
pip install "패키지" 오류 발생 시 대처 (0) | 2022.12.26 |
파이썬 - collections.namedtuple (0) | 2022.12.17 |
파이썬 - collections.deque (0) | 2022.12.17 |
파이썬 - datetime 라이브러리 (0) | 2022.12.17 |