现有列表如下:
[6, 7, 5, 9, 4, 1, 8, 6, 2, 9]
希望统计各个元素出现的次数,可以看作一个词频统计的问题。
我们希望最终得到一个这样的结果:{6:2, 7:1...}即 {某个元素:出现的次数...}
首先要将这些元素作为字典的键,建立一个初值为空的字典:
>>> from random import randint >>> l = [randint(1,10) for x in xrange(10)] >>> l [6, 7, 5, 9, 4, 1, 8, 6, 2, 9] >>> d = dict.fromkeys(l, 0) >>> d {1: 0, 2: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0} # 现在的任务是需要将d中每个键所对应的值统计出来 >>> for x in l: >>> d[x] += 1 >>> d {1: 1, 2: 1, 4: 1, 5: 1, 6: 2, 7: 1, 8: 1, 9: 2} # 这就统计完了所有的元素出现的次数
另外一种方法,利用collections模块中的Counter对象
>>> from collections import Counter # 这个Counter可以直接接受一个列表,将它转化为统计完成的结果 >>> d = Counter(l) >>> d Counter({6: 2, 9: 2, 1: 1, 2: 1, 4: 1, 5: 1, 7: 1, 8: 1}) # 该Counter对象是字典对象的子类,也可以通过键来访问对应值 >>> d[6] 2 # Counter对象方便之处在于它内置有most_common(n)方法,可以直接统计出前n个最高词频 >>> d.most_common(2) [(6, 2), (9, 2)]
下面进行实践,对某篇文章进行词频统计,得到词频最高的十个词。
>>> import re >>> from collections import Counter >>> txt = open('CodingStyle.txt').read() >>> new_txt = re.split('\W+', txt) >>> result = Counter(new_txt) >>> result.most_common(10)
使用python对中文文档进行词频统计
1、使用jieba先对中文文档进行分词处理
输出的clean_title.txt内容
结果:
需要处理的clean_data.csv文件内容(三列)
http://you.ctrip.com/travels/1322/1360550.html 地中海邮轮+罗马深度自由行 宅猫行天下
http://you.ctrip.com/travels/1400/1600356.html 柏林&安纳西 老鼠m
- import sys
- reload(sys)
- sys.setdefaultencoding("utf-8")
- import jieba
- import jieba.analyse
- wf = open('clean_title.txt','w+')
- for line in open('/root/clean_data/clean_data.csv'):
- item = line.strip('\n\r').split('\t') //制表格切分
- # print item[1]
- tags = jieba.analyse.extract_tags(item[1]) //jieba分词
- tagsw = ",".join(tags) //逗号连接切分的词
- wf.write(tagsw)
- wf.close()
输出的clean_title.txt内容
- 邮轮,地中海,深度,罗马,自由纳西,柏林签证,步行,三天,批准申根,手把手,签证,申请,如何赞爆,法兰,穿越,葡萄酒,风景,河谷,世界欧洲颜色,一种,国家,一个水族箱,帕劳,七日,上帝奥林匹亚,跑步圣托,
- 里尼,文明古国,探访,爱琴海,魅力,希腊
2、统计词频
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- word_lst = []
- word_dict= {}
- with open('/root/clean_data/clean_title.txt') as wf,open("word.txt",'w') as wf2: //打开文件
- for word in wf:
- word_lst.append(word.split(',')) //使用逗号进行切分
- for item in word_lst:
- for item2 in item:
- if item2 not in word_dict: //统计数量
- word_dict[item2] = 1
- else:
- word_dict[item2] += 1
- for key in word_dict:
- print key,word_dict[key]
- wf2.write(key+' '+str(word_dict[key])+'\n') //写入文档
结果:
- 最后 4
- 欧洲幽蓝 1
- 集美 1
- 葡萄牙法多 1
- 工地 1
- 知道湖光山色 1
- 神圣 7
- 欧洲少女瑞士加游 1
根据词汇数量排序查看:
cat word.txt |sort -nr -k 2|more
- 神圣 7
- 最后 4
- 欧洲幽蓝 1
- 集美 1
- 葡萄牙法多 1
- 工地 1
- 知道湖光山色 1
- 欧洲少女瑞士加游 1