Seongwon Lim

[Python] Counter 클래스를 이용한 단어 빈도 세기 본문

Python

[Python] Counter 클래스를 이용한 단어 빈도 세기

limsw 2022. 5. 10. 14:05
반응형

What is Counter?

Counter 함수는 파이썬의 collections 모듈에서 제공하는 클래스이다. 파이썬에서 항목이나 개수를 셀 때 많이 사용되고 있다.

파이썬 딕셔너리를 이용해서 직접 데이터를 파싱하여 워드 카운팅을 진행할 수 있지만 Counter 클래스를 이용하면 간단하게 구현할 수 있기 때문에 훨씬 효율적이다.

Counter example

해당 사이트에서 샘플 텍스트 파일을 다운받은 뒤 공백을 기준으로 단어를 파싱하여 워드 카운팅을 진행할 예정이다. (sample3.txt 파일을 사용했다)

1. 딕셔너리로 구현한 Word Counting

with open('sample3.txt', 'r') as f:
    text = f.read().split()

dic = {}

for w in text:
    if not w in dic:
        dic[w] = 1
    else:
        dic[w] += 1

result = sorted(dic.items(), key=lambda x: x[1], reverse=True)
print(result[:10])

위 코드는 공백 단위로 단어를 파싱하여 단어 출현 빈도 상위 10개를 추출하는 코드이다.
Counter 클래스를 이용하지 않고 집적 딕셔너리를 사용하여 코드를 작성하면 위와 같이 구현할 수 있다.

2. Counter 클래스를 이용한 Word Counting

from collections import Counter

with open('sample3.txt', 'r') as f:
    text = f.read().split()
    
result = Counter(text) # 출현 빈도 카운트
most_word_10 = result.most_common(10) # 빈도 상위 10개 추출

print(result)
print(most_word_10)

Counter 클래스를 이용하여 구현한 워드 카운트 코드는 위와 같다.

 

파이썬으로 워드 카운트를 구현할 때 딕셔너리를 이용한 방법과 파이썬 모듈을 사용한 방법 모두 짧은 코드로 구현할 수 있지만 파이썬에서 제공하는 모듈을 활용할 줄 안다면 더욱 유용하게 프로그램을 구현할 수 있을 것이라고 생각한다.


번외 - 리눅스 쉘을 이용하여 워드 카운트 구현하기

  • cat sample3.txt | tr -s '[:punct:][:space:]' '\n' | sort | uniq -c

이 한줄로 리눅스 쉘 스크립트 상에서 파일을 공백 단위로 나누어 단어 빈도 카운트를 할 수 있다. 해당 방식은 Map-Reduce의 성질을 가지고 있기 때문에 병렬화가 가능하며 빠르게 워드 카운트를 할 수 있다.


head -n 10 옵션을 통해서 맨 위에서 10개를 추출한 사진이다. 이처럼 빠르게 데이터 파싱을 할 수 있고 사용자 요구에 따라서 결과를 아웃풋으로 저장하여 활용할 수도 있다.

Comments