python 词频的统计多种方式

现有列表如下:

[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对中文文档进行词频统计

  • 15247
1、使用jieba先对中文文档进行分词处理

需要处理的clean_data.csv文件内容(三列)

http://you.ctrip.com/travels/1322/1360550.html   地中海邮轮+罗马深度自由行      宅猫行天下     
http://you.ctrip.com/travels/1400/1600356.html  柏林&安纳西     老鼠m

[python]  view plain  copy
  1. import sys  
  2. reload(sys)  
  3. sys.setdefaultencoding("utf-8")  
  4.   
  5. import jieba  
  6. import jieba.analyse  
  7.   
  8. wf = open('clean_title.txt','w+')  
  9. for line in open('/root/clean_data/clean_data.csv'):  
  10.   
  11.     item = line.strip('\n\r').split('\t') //制表格切分  
  12.     # print item[1]  
  13.     tags = jieba.analyse.extract_tags(item[1]) //jieba分词  
  14.     tagsw = ",".join(tags) //逗号连接切分的词  
  15.     wf.write(tagsw)  
  16.   
  17. wf.close()  

输出的clean_title.txt内容

[python]  view plain  copy
  1. 邮轮,地中海,深度,罗马,自由纳西,柏林签证,步行,三天,批准申根,手把手,签证,申请,如何赞爆,法兰,穿越,葡萄酒,风景,河谷,世界欧洲颜色,一种,国家,一个水族箱,帕劳,七日,上帝奥林匹亚,跑步圣托,  
  2. 里尼,文明古国,探访,爱琴海,魅力,希腊  

2、统计词频

[python]  view plain  copy
  1. #!/usr/bin/python  
  2. # -*- coding:utf-8 -*-  
  3.   
  4. word_lst = []  
  5. word_dict= {}  
  6. with open('/root/clean_data/clean_title.txt') as wf,open("word.txt",'w') as wf2: //打开文件  
  7.   
  8.     for word in wf:  
  9.         word_lst.append(word.split(',')) //使用逗号进行切分  
  10.         for item in word_lst:  
  11.              for item2 in item:  
  12.                 if item2 not in word_dict: //统计数量  
  13.                     word_dict[item2] = 1  
  14.                 else:  
  15.                     word_dict[item2] += 1  
  16.   
  17.     for key in word_dict:  
  18.         print key,word_dict[key]  
  19.         wf2.write(key+' '+str(word_dict[key])+'\n') //写入文档  

结果:

[python]  view plain  copy
  1. 最后 4  
  2. 欧洲幽蓝 1  
  3. 集美 1  
  4. 葡萄牙法多 1  
  5. 工地 1  
  6. 知道湖光山色 1  
  7. 神圣 7  
  8. 欧洲少女瑞士加游 1  

根据词汇数量排序查看:

cat word.txt |sort -nr -k 2|more

[python]  view plain  copy
  1. 神圣 7  
  2. 最后 4  
  3. 欧洲幽蓝 1  
  4. 集美 1  
  5. 葡萄牙法多 1  
  6. 工地 1  
  7. 知道湖光山色 1  
  8. 欧洲少女瑞士加游 1  


你可能感兴趣的:(python,强化学习)