더북(TheBook)

13.12 연습문제

연습문제 13-9

단어의 순위는 빈도로 정렬한 단어 목록의 위치다. 가장 많이 나오는 단어의 순위가 1이고, 그다음 많이 나오는 단어가 순위 2가 되는 식이다.

지프의 법칙(Zipfs law)은 자연어에서 단어의 순위와 빈도 사이의 관계를 설명한다(http://en.wikipedia.org/wiki/Zipfs_law). 특히, 단어의 빈도 f와 순위 r로 다음과 같이 예측할 수 있다.

f = cr-s

sc는 언어와 텍스트에 따라 달라지는 인자다. 이 방정식의 양쪽에 로그를 취하면 다음 식을 얻을 수 있다.

log f = log cs log r

따라서 로그 f와 로그 r로 그리면 기울기 s, 절편이 log c인 직선을 얻게 된다.

파일에서 텍스트를 읽어서 단어 빈도를 세고, 한 줄에 한 단어씩 log flog r에 따라 빈도의 내림차순으로 출력하는 프로그램을 작성하라. 원하는 그래프 프로그램을 사용하여 결과를 그리고, 직선을 형성하는지 확인하라. s의 값을 추정할 수 있는가?

해법: http://thinkpython2.com/code/zipf.py를 참조하라. 내가 작성한 해법을 실행하려면 matplotlib 모듈이 필요하다. Anaconda를 설치했다면 matplotlib이 이미 설치되어있다. 그렇지 않다면 직접 설치해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.