Appia의 IT세상

파이썬[Python] 단어들의 사용빈도 확인하기 본문

Python/Python 응용

파이썬[Python] 단어들의 사용빈도 확인하기

Appia 2020. 3. 10. 07:11
반응형

우리는 글을 쓰면서, 특정 단어들을 격하게 많이 사용하는 경우가 있습니다. 그리고 때론, 특정 단어들의 사용 빈도와 상관없이 이미 그 단어들을 사용하고 있을 수 있습니다. 그래서 이번 포스팅에서는 텍스트 파일들에서 특정 단어의 사용빈도를 확인하는 방법을 알아보고자 합니다. 

 

특정 단어의 사용빈도 확인하기 

위의 코드 실습을 위해서 간단하게 텍스트 파일을 다음과 같이 한번 만들어보겠습니다. 

Hello. 

My name is Appia

Hi

Hello

Appia

Good night

Good bye

See you later 

 

Txt_example.txt
0.00MB

혹시 몰라서, 위의 예제를 위해서 문자들을 별도의 텍스트 파일로 저장하여 첨부드렸습니다. 참고하세요. 그럼 위의 예제 파일을 바탕으로 다음과 같은 예제를 한번 살펴보겠습니다. 

file = open('Txt_example.txt'"r")
 
text = file.read() 
 
wordList = text.split()
 
wordCount = {} 
 
for word in wordList:
 
    # Get 명령어를 통해, Dictionary에 Key가 없으면 0리턴
 
    wordCount[word] = wordCount.get(word, 0+ 1 
    
    keys = sorted(wordCount.keys())
 
for word in keys:
 
    print(word + ':' + str(wordCount[word])) 
cs

위의 예제를 실행하면 다음과 같은 결과가 나옵니다. 

Appia: 2
 
Good: 2
 
Hello: 2
 
Hi: 1
 
My: 1
 
See: 1
 
bye: 1
 
is1
 
later: 1
 
name: 1
 
night: 1
 
you: 1
cs

먼저 dictionary를 생성하고, get(단어, 0)을 통해서 처음 보는 단어가 나오면 0를 리턴해주고 나서 1을 더해주는 방식을 취했습니다. 그 부분을 dictionary의 value 부분에 입력해주었습니다. 

 

물론, 위와 같이 단어 단위로 하면 참 많은 도움이 될 것 같습니다. 하지만, 갑자기 그런 생각이 듭니다. 각 줄에 포함된 문장의 반복 여부를 확인할 때는 어떻게 할까요? 

 

특정 라인의 사용 빈도 확인하기

위의 예제에서 다음과 같은 부분만 수정을 해주면 됩니다. 

wordList = text.split() -> wordList = text.split("\n")

위와 같이만 바꿔도 라인단위로 가능합니다. 하지만 저는 또 다른 방법을 한번 살펴보겠습니다.  

from collections import Counter
 
= Counter()
 
with open('Txt_example.txt') as f:
 
    for line in f:
    
        c[line.rstrip()] += 1
 
for k, v in c.items():
 
    print('{}: {}'.format(k, v))
cs

저는 Counter 모듈을 사용해서 위와 같이 한번 코드를 작성해봤습니다. 위의 함수중에 rstrip()은 우측에 있는 공백을 사라지게 하는 것입니다. 그럼 위의 코드를 한번 실행해보면 다음과 같은 결과가 나옵니다. 

Hello: 2
 
My name is Appia: 1
 
Hi: 1
 
Appia: 1
 
Good night: 1
 
Good bye: 1
 
See you later: 1
cs

위에서 Counter를 c로 선언하고 파일을 읽어와서 각 라인들을 counter로 추가 해주는 것입니다. 만약에 Counter 선언된 c에 포함되지 않는다면, 1이 될것이고, 생성이 되었다면, 추가적으로 1씩 추가되어 결과가 위와 같이 나타납니다. 

 

물론 위의 첫번째 예제와 같이 counter를 사용하지 않고 dictionary를 생성하여 

wordCount[word] = wordCount.get(word, 0) + 1 

부분을 활용한다면, 모듈을 불러오지 않고도 충분히 동일한 결과를 나타낼 수 있습니다. 

 

오늘은 단어의 빈도를 확인하는 방법과 라인의 사용 수를 카운트 하는 부분에 대해서 알아봤습니다. 코딩을 하다보니, 코딩에 대한 답은 없는 것 같습니다. 세련되게 코딩을 하나, 무식하게 코딩을 하나 본인이 하는 것이 답이라는 것을 명심하시고, 제가 올린 코드들을 그대로 사용하시기 보다, 한번 다른 방식으로 풀어서 사용해보시는 것을 어떨까 하는 생각이 듭니다. 오늘은 원하시는 부분에서 충분히 도움이 되시기를 바랍니다. 

 

혹시 도움이 되셨다면, 공감 버튼 클릭 부탁드립니다. 

 

반응형
Comments