필요한 모듈을 임포트 합니다.


In [1]:
import re
import random
import json

jungle-book.txt 파일을 임포트 하고 한 라인씩 읽어서 단어를 잘라냅니다. 단어를 소문자로 바꾼 후 hist 딕셔너리에 키로 등록하고 단어가 나타난 빈도를 증가시켜서 저장합니다.


In [2]:
hist = {}
with open('jungle-book.txt') as f:
    for line in f.readlines():
        lines = re.findall('[a-zA-Z0-9]+', line)
        for word in lines:
            word = word.lower()
            hist[word] = hist.get(word, 0) + 1

histogram.txt 파일에 json 문자열로 변환하여 저장합니다.


In [3]:
with open('histogram.txt', 'w') as f:
    json.dump(hist, f)

hist 딕셔너리의 전체 키의 갯수를 출력합니다.


In [4]:
len(hist)


Out[4]:
5028

단어가 나타난 빈도를 모두 더합니다.


In [5]:
sum(hist.values())


Out[5]:
55442

가장 많이 나타난 단어를 추출하기 위해 빈도와 단어를 튜플로 만들어 리스트에 저장하고 리스트의 sort 메소드를 사용하여 최상위 10개만을 추려냅니다. 튜플이나 리스트는 엘리먼트를 순서대로 비교하여 대소를 구분합니다.


In [6]:
t = []
for word in hist:
    t.append((hist[word], word))
t.sort(reverse=True)
t[:10]


Out[6]:
[(3630, 'the'),
 (2315, 'and'),
 (1314, 'of'),
 (1261, 'to'),
 (1153, 'a'),
 (1074, 'he'),
 (735, 'in'),
 (676, 'that'),
 (650, 'i'),
 (648, 'his')]

단어가 나타난 빈도에 비례하여 랜덤하게 단어를 추출하기 위하여 단어를 빈도만큼 생성하여 새로운 리스트에 추가한 후 그 리스트에서 랜덤하게 하나를 추출합니다.


In [7]:
rnd_word = []
for word in hist:
    rnd_word.extend([word] * hist[word])

print(len(rnd_word))
random.choice(rnd_word)


55442
Out[7]:
'his'

In [ ]: