tuples_高频词汇统计

内容来自:python for information https://fanwscu.gitbooks.io/py4inf-zh-cn/chapter10.html

文本取自《罗密欧于朱丽叶》的第二幕第二场。现在,我们扩充这个程序,输出文本中出现次数最多的前十个单词,代码如下所示:

import string
fhand = open('romeo-full.txt')
counts = dict()
for line in fhand:
    line = line.translate(None, string.punctuation) #可参考dict中解析文本随笔
    line = line.lower()
    words = line.split()
    for word in words:
        if word not in counts:    #可用counts[words] = counts.get(word,0) + 1 ,字典中get方法,不在则返回0
            counts[word] = 1
        else:
            counts[word] += 1

# Sort the dictionary by value
lst = list()
for key, val in counts.items():  #把counts的键值对给key和val
    lst.append( (val, key) )     #追加到lst,便于使用sort方法

lst.sort(reverse=True)  #倒序排序

for key, val in lst[:10] : #取前十个
    print key, val

程序的第一部分读取文件,计算出文档中每个单词出现的次数,将单词及其出现次数放入字典中。这部分程序不做修改。之前输出变量count的值之后,程序就结束了,这里我们创建一个(val, key)元组列表,按照逆序对列表进行排序。

由于元组中值是第一个元素,所以它被用于比较。如果多个元组拥有相同的值,接下来检查元组的第二个元素(键)。因此,如果值相同,元组将按照键的字母顺序进行排序。

在程序末尾,我们写了一个for循环,实现多个赋值的迭代,通过列表切片操作(lst[:10]),迭代输出前十个高频词汇。

至此,程序的输出看上去符合我们想要的词频分析结果。

61 i
42 and
40 romeo
34 to
34 the
32 thou
32 juliet
30 that
29 my
24 thee

事实上,如此复杂的数据解析与分析只需19行易于理解的Python代码就解决了。这就是Python语言用于信息分析的明智选择依据之一。

 

posted @ 2018-03-26 21:01  solitude_26  阅读(156)  评论(0)    收藏  举报