题目(1):P82.第23题.
齐夫定律:f(w)是自由文本中词w的频率。假设一个文本中的所有词都按照它们的频率排名,频率最高的排在最前面。齐夫定律指出一个词类型的频率与它的排名成反比(即f*r=k,k是某个常数)。例如:最常见的第50个词类型出现的频率应该是最常见的第150个词类型出现频率的3倍。
a) 写一个函数来处理一个大文本,使用pylab.plot画出相对于词的排名的词的概率,你认可齐夫定律吗?(提示:使用对数刻度会有帮助。)所绘的线的极端情况是怎样的?
b) 随机生成文本,如:使用random.choice(“abcdefg”),注意要包括空格字符。你事先需要import random。使用字符串连接操作将字符累积成一个很长的字符串。然后为这个字符串分词,生成前面的齐夫图,比较这两个图。此时你如何看待齐夫定律?
# 23--a
dictionary = FreqDist()
words = inaugural.words()
fd = FreqDist([w.lower() for w in words])
for key in fd:
dictionary[key] = math.log10(fd[key])
fd2 = dict(fd)
sort_words = sorted(fd2.items(), key=lambda item: item[1