python之统计句子中的词频次数

1.贴题

题目来自MOOC
《用Python玩转数据》(南京大学)
第四周编程作业


对于一个已分词的句子(可方便地扩展到统计文件中的词频):
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!
可以用collections模块中的Counter()函数方便地统计词频,例如可用如下代码:

import collections
s = "我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/"
s_list = s.split('/') 
[s_list.remove(item) for item in s_list if item in ',。!”“']
collections.Counter(s_list)

这个问题也可以通过字典来解决,请编写用字典解决本问题的程序,为便于OJ系统自动判断,程序最后输出字符串中包含的不同词的个数。
程序参考框架

def countfeq(s):
   ... ...
   return a dict
if __name__ == "__main__":
   s = input()
   ... ...
   s_dict = countfeq(s)
   print(len(s_dict.keys()))

输入格式:
字符串

输出格式:
整数

输入样例(因为oj系统限制,测试用例设为判断英文单词个数,请注意英文标点,假设仅包含,和.):
Spring/is/coming/./Spring/is/coming/.

输出样例:
3
时间限制:500ms内存限制:32000kb


2.说明

思路很简单,就是建立一个字典,key为单词,value为个数,数个数使用collections里面的Counter函数。

3.参考代码

话不多说,贴代码。

import collections #导入库
def countfeq(s): #词频统计函数
    s_list = s.split('/')  #以"/"为分界将字符串变成列表
    [s_list.remove(item) for item in s_list if item in ',.'] #将',.'去除
    dic = collections.Counter(s_list) #利用Counter函数统计个数
    return dic #返回字典
if __name__ == "__main__":
    s = input() #输入字符串
    s_dict = countfeq(s) #执行函数
    print(len(s_dict.keys())) #打印字典key的长度(个数),即为不同单词的个数

4.后记

虽然这道题不难,根据给出的框架能够很容易地解答出来,但是学到了

  • 一个函数,collections.Counter(list)可以生成字典,key为list里的字符或单词,value为个数
  • list.remove(item)把list里面的某个字符或单词去除,也可以嵌套循环和条件语句
  • 写代码的时候疑问过collections.Counter(s_list)有没有范围值,返回的是什么,经过查询发现是字典

参考Python标准库——collections模块的Counter类

扫描二维码关注公众号,回复: 605701 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_41980474/article/details/80046963
今日推荐