Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 문자열 내 각 단어의 빈도수 구하는 방법

텍스트 분석 작업을 하다 보면 단어의 개수를 세고, 다양한 알고리즘 처리를 위해 각 단어에 가중치를 부여해야 하는 경우가 자주 발생합니다. 이 글에서는 주어진 문장에서 각 단어의 빈도수를 구하는 방법을 소개합니다. 크게 세 가지 접근 방식이 있으며, 하나씩 살펴보겠습니다.

1. Counter 사용하기

collections 모듈의 Counter() 클래스를 활용하면 손쉽게 단어 빈도를 계산할 수 있습니다. 먼저 split() 메서드로 문장을 단어 단위로 나눈 뒤, most_common() 메서드를 적용하면 빈도순으로 정렬된 결과를 얻을 수 있습니다.

예제

from collections import Counter
line_text = "Learn and practice and learn to practice"
freq = Counter(line_text.split()).most_common()
print(freq)

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

[('and', 2), ('practice', 2), ('Learn', 1), ('learn', 1), ('to', 1)]

2. FreqDist() 사용하기

자연어 처리 도구인 NLTK(Natural Language Toolkit)는 FreqDist 함수를 제공합니다. 이 함수는 문자열에 포함된 전체 단어 수뿐만 아니라 고유한 단어의 개수까지 함께 보여줍니다. 여기에 most_common()을 적용하면 각 단어의 빈도를 확인할 수 있습니다.

예제

from nltk import FreqDist
text = "Learn and practice and learn to practice"
words = text.split()
fdist1 = FreqDist(words)
print(fdist1)
print(fdist1.most_common())

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

<FreqDist with 5 samples and 7 outcomes>
[('and', 2), ('practice', 2), ('Learn', 1), ('learn', 1), ('to', 1)]

3. 딕셔너리(Dictionary) 사용하기

이 방식에서는 문장의 단어들을 딕셔너리에 저장합니다. 그다음 count() 메서드로 각 단어의 빈도를 구하고, zip() 함수로 단어와 빈도 값을 묶습니다. 최종 결과는 딕셔너리 형태로 출력됩니다.

예제

text = "Learn and practice and learn to practice"
words = []
words = text.split()
wfreq=[words.count(w) for w in words]
print(dict(zip(words,wfreq)))

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

{'Learn': 1, 'and': 2, 'practice': 2, 'learn': 1, 'to': 1}

마무리

세 가지 방법 모두 동일한 결과를 제공하지만 상황에 따라 장단점이 있습니다. Counter는 표준 라이브러리만으로 간결하게 처리할 수 있고, FreqDist는 NLTK 기반의 텍스트 분석 파이프라인에서 유용하며, 딕셔너리 방식은 외부 모듈 없이 순수 Python 문법만으로 구현할 수 있다는 점이 특징입니다. 데이터 규모가 클 경우에는 Counter나 FreqDist처럼 최적화된 도구를 사용하는 것이 성능 면에서 유리합니다.