关于文本频次统计。先不要考虑如何用python实现的问题。
我捋一捋自己的思路。
频次统计有几种呢?有时我们关注个别字母和汉字的出现频率,也有时候我们更多会关注个别单词或词语的出现频率。
针对这两种常见的频次统计需求,还是先不要考虑如何用python实现的问题。python能帮我们完成很多事,但它永远无法帮我们思考。
就以一篇英语文章为例,我该怎么完成这个任务呢?我的操作步骤大概是这样的:
1 创建一个Excel表格,将字母a-z排序好
2打开要统计的文件
3从第一个字母开始,在Excel相应字母位置累加1,并划掉文本相应字母
4换行进行同样操作直到文本最后一个字母
5将Excel表格中a-z字母出现次数按从大到小顺序排列
发给老板,可以下班了。
好了,现在可以思考python程序应该怎样实现的问题了。
python词频统计程序就是对以上过程的模拟,所以只要你理清了自己要做的事情的一个逻辑过程,在将这个逻辑过程用程序实现即可,至于具体需要什么函数去实现这个过程,其实大概你都知道得差不多了,比如我打开这个文本是不是需要一个函数,哦,原来有个open()函数就是用来打开文本文件的。
必须说明的是:具体的代码实现过程,并不一定是完全按照我上述几个步骤,这些步骤是人自己动手统计词频的方式之一,人是可以靠自己思考和判断的,而程序不能。上述步骤只是想表达一个动手写代码前要养成逻辑思考的习惯。
我继续思考着。。。。。
词频统计这个功能需求就是实现一堆东西里找出相同的东西统计个数并排序。那有没有人已经实现了这个功能呢?
我找啊找,找啊找,原来还真的有!
python自带标准模块collections下有一个Counter类,就能实现相应的需求。
那对于词语统计呢?python可以一个一个的找字母或汉字,这些固定的东西,a就是a,一就是一。python怎么判断这个东西是不是一个词语,它不能思考,怎么去划分词语啊。
别担心,你思考的这些问题已经有人思考过了,但我为你能思考到这些问题而高兴。
于是,我继续找啊找,找啊找,原来真的有。
jieba就是一个优秀的第三方分词库。这个库里有很多常用的词组模型,只要你把文本传入这个模型,它就能输出词语。大概原理就是文本给它,它读取文本内容,将文本分割成很多块,将每一块与模型词组对比,经过模型判断确认,完成所有块的对比后,统计并输出匹配成功的块,即为词语的词频统计。
好了,就先聊这么多。
最后分享自己的感悟:python只是工具,永远不要放弃思考。