python统计词频创建字典_如何利⽤Python进⾏⽂本词频统计问题描述
Python在⾃然语⾔处理这个⽅⾯,有其天然的优势:简单,快捷。所以我们经常会遇到利⽤Python从⼀篇⽂档中,统计⽂本词频的问题。以《三国演义》这部名著为例,⽂中哪些⼈物的出场次数最多呢?让我们⽤Python来解决看看吧!解决⽅案
在实际计算中,我们常常遇到需要同时处理多个数据的情况,所以我们引⼊了“组合数据类型”的概念。⽽我们今天主要⽤到的就是组合数据类型中映射类型“字典”的知识。字典具有处理任意长度和混合类型键值对的能⼒。
简单介绍了相关知识后,我们再来审审题。⽂本词频统计其实就是计算同⼀个词语出现的次数,通过对⽂本信息的⾃动检索,进⾏累加的简单计算就可以解决问题。
下⾯是此问题的IPO描述:
python中文文档Input:读取《三国演义》内容
Process:利⽤“字典”统计词语的出现次数
Output:打印出《三国演义》中出场次数最多的⼈名和具体次数
我们⼀直在强调的是⽂本词频的统计,那么“词语”就成为了关键,如何从⼀段话中提取准确的词语呢?我们就要引⼊Python第三⽅
库“jieba”的知识啦。Jieba是python中⼀个重要的第三⽅中⽂分词函数库,他将待分词的内容与分词词库依次进⾏⽐对,通过图结构和动态规划的⽅法到最⼤概率的词组。
所以在第⼀⾏我们要引⼊jieba库
在第⼆⾏执⾏input,利⽤open函数,打开《三国演义》的⽂档。⽂档名为:
接下来在第三⾏开始利⽤jieba 库的分词函数jieba.lcut()进⾏分词,这个分词函数是在精确模式下,可以形成列表类型的。我们把他命名为words。
接着,构造⼀个字典counts,对⽐词库,对⽂件进⾏列表分词。并通过的⽅法,对相关词语进⾏计数。‘
从第⼗⾏开始,正式进⼊累加的环节,将counts转换为列表格式。
第⼗⼀⾏是进⼀步对列表进⾏排序。然后⽤for i in range的⽅式,打印出排名前20的⼈物名称。
结果如下:
但是我们在打印出来的结果中发现,像“却说”,“⼆⼈”,“不可”这样的词是不属于⼈名的,⽽且像“孔明”和“孔明⽈”这样词语⼜是⼀个意思,所以这个统计结果,并不是很准确。所以我们还要对刚刚的代码进⾏调整,⽐如加⼊⼀段排除词汇的代码。
为了解决问题⼀,排除不是⼈名的词汇,我们构造⼀个excludes的集合,将累计次数较⾼的词汇输⼊进去。这样的词汇怎么获得呢,我们只有⼀个笨办法,那就是“试”!不断的运⾏程序,让更多的词汇浮出⽔⾯,再把他们加到excludes的集合中,直到排名前20的词语都是⼈名为⽌。
为了解决问题⼆,我们要对词语进⾏整合,这就是第9到18⾏代码的作⽤了。
完整代码如下:
因为排除词汇的⼯作量太⼤了,所以我仅将出场排名前8名的⼈物打印出来了:
结果如下:
结语
这个实例的作⽤主要是让我们运⽤组合数据类型对⽂本进⾏词频统计。这⾥涉及到了列表和字典的知识,需要我们温故⽽知新。对于列表,我们可以⽤列表管理采集到的信息,⽤来构建数据结构;对于字典,我们可以⽤字典来处理复杂的数据信息。
总之,能完成⼀个实例,能写能理解,才代表你真正学会了这部分知识。也要记住,好的代码是靠着每⼀点点的修改,才能成为完美