정리한 내용을 코드로 작성하면 다음과 같습니다.
for w in word_list:
if w not in vocab: # 단어가 vocab 딕셔너리의 키에 없으면
vocab[w] = 1 # 새로운 요소 추가
else: # 단어가 vocab 딕셔너리의 키에 있으면
vocab[w] += 1 # vocab[w]의 값 1 증가
print(vocab)
반복문에서 word_list에 담긴 단어를 w 변수에 차례대로 저장하며 반복문 내부에 있는 조건문을 실행합니다. 만약 w에 저장한 단어가 vocab 딕셔너리에 없으면 이 단어는 처음으로 등장하므로 새로 키를 추가하고 값에는 빈도수 1을 넣습니다. 만약 w에 저장한 단어가 이미 vocab에 있다면 빈도수만 1을 증가시킵니다. 반복이 끝나면 마지막에 print(vocab)을 실행해 vocab 딕셔너리에 담긴 내용을 확인합니다.
실행결과
{'in': 15, 'a': 24, 'town': 1, 'of': 33, 'persia': 1, 'lived': 2, 'two': 3, 'brothers': 1, ',': 103, 'sons': 1, 'poor': 3, 'man': 3…}
단어와 빈도수가 쌍으로 출력됩니다. 이제 빈도수를 기준으로 내림차순 정렬할 차례입니다. 이때 값만으로 정렬하는 것이 아니라 값을 기준으로 키-값 쌍으로 정렬한다는 점에 유의해야 합니다. 따라서 sorted(vocab.items())로 정렬해야 합니다. 그리고 키-값 쌍에서 값을 기준으로 정렬하므로 key=operator.itemgetter(1) 옵션을 줍니다. 또한 내림차순 정렬이므로 reverse=True 옵션도 추가해야 합니다.
import operator
print(sorted(vocab.items(), key=operator.itemgetter(1), reverse=True))
실행결과
[(',', 103), ('the', 78), ('.', 41), ('and', 37), ('to', 34), ('of', 33), ('a', 24), ('his', 22), ('he', 22), ('alibaba', 17)…]
실행결과를 보면 가장 많이 등장한 것은 단어가 아닌 콤마(,)고, 그다음으로 많이 등장한 단어는 the네요. 예상한 결과와 조금 다릅니다. 다음 단계에서 이 부분을 해결해 봅시다.