Python如何选取高频词汇 python筛选高频词_Python


Python入门。


  • 数据源:50w个怎么长尾词
  • 编程语言:Python
  • 文件格式:逗号分隔的csvUTF-8

“思路: 对每个长尾词进行切词处理,无效词&过长过短词过滤,词频统计得到TopN词根;针对下述两层级进行相同处理后,得到3个层级的TopN词根思维导图;

层级越深,长尾词的归类更为精准,通常三层就已足够;不同层级TopN 阈值可设置绝对值如5000,100,50;

也有大佬是按照二八准则筛选出每个层级覆盖80%词频的TopN个词根;

每一步功能需要的模块就像是单独的乐高积木,想实现最终结果,只需把每个小积木在正确的地方搭好就可以实现一个伟大的东西。

本文就不贴我的九流代码上来丢人现眼,主要说下我整个实现中用到的模块以及对应的学习资源,均可通过百度搜到相关的使用方法。

基础知识储备:

  • 循环:for
  • 判断:if..else...
  • 异常:try...except
  • 数据结构:listdictset
  • 函数:sorted()sum()len()
  • 第三方库:pandasxmindjieba

后面的内容推荐考虑自学Python的同学看

  1. 读取csv文件
  2. 过滤长短词
  3. 切词处理&停用词加载
  4. 倒排索引文档建立
  5. sorted对词根进行词频排序
  6. 利用Xmind构建思维导图

1.读取csv文件

为什么要用 csv 而不是 xls?

因为Excel的xls/xlsx有行数限制,最大为65536行;如果数据量>65536,建议csv或者txt。前者看起来美观直接,后者加载起来更快。

“我个人就习惯用的csv格式文件,代码也是用的pandas.read_csv”

pandas.read_csv可以直接读取csv文件,自带参数有很多,有兴趣的话可以去官方文档看下,

像我用得多的就是sepencoding两个参数,一个指定切割符,一个指定编码格式(一般UTF-8或者GBK,防止中文乱码)

pandas读写CSV操作

2.过滤长短词

对于过长或者过短的词认为能带来的信息小于夹杂的噪声,价值不大,进行过滤处理。

刚好,pandas支持对于行数据长度、大小以及是否包含某个词进行筛选,具体可以这篇简书的博文,里面提到的几种筛选方式基本足够:

3.切词处理&停用词加载

从百度返回的结果看,Jieba分词是最多使用的切词第三方库了,相关教程也很完善

切词可以考虑

  • jieba.cut、
  • jieba.lcut、
  • jieba.analyse.extract_tags(关键词提取)

因为extract_tags可以配合 jieba.analyse.set_stop_words()使用,直接过滤掉停用词表中的停用词,所以我换掉了jieba.cutfor...in stopwords的方式。

4.倒排索引文档建立

接下来是对于处理后的四个文档:

  • 库1:{id:[长尾词,对应词根集合]}
  • 库2:{长尾词:id}
  • 库3:{词根:对应词频}
  • 库4:{词根:对应ID列表}

主要根据字典+列表+集合对数据进行对应存储,实现四个词典库的建立。

建议先看一下廖雪峰的Python教程。

字典:也叫键值对,顾名思义,一个键对于一个值,也就是key-value,简单来说就像门牌号跟房间的关系,不管房间里面是什么东西,门牌号只负责对应这个房间。

列表:有点像工厂中的流水线,有序而且流水线上的东西是可以重复的。

集合:像幼儿园班级,没什么纪律性,每个小孩子都是唯一一个。

看着很多的样子,其实放到同一个for循环里面,四个词典库的建立只需要8行代码就可以。


for i in data.values:
  #{id:[长尾词,对应词根集合]}
  dict_1.setdefault(i[0],[]).append(i[1])
  dict_1.setdefault(i[0],[]).append(i[3])
  #{长尾词:id} 方便通过长尾词找到词根集合
  dict_2[i[1]] = i[0]
  while i[2]:
      w = i[2].pop()
      # 库3:{词根:对应词频}
      dict_3[w] = dict_3.get(w, 0) + 1    
      #库4:{词根:对应ID集合}
      dict_4.setdefault(w,[]).append(i[0])


库2跟库3实现方式一样,只需要先设定一个空字典,再往每个字典加入key以及对应的value就行。

库4&1 跟2&3的不同在于 值并不是单独的一个字符串,而是一个ID列表--可以存储多个值,所以需要用到 dict内置函数setdefault(key,[]).append()

菜鸟教程Dict

5.sorted()进行词频排序

因为我最开始的想法是根据词频Top100的词根制做思维导图,所以我需要从库3里面得到词频最高的100个词根.

而现在字典并没有根据词频进行排序,百度一下“Python字典按值排序”就搜到了内置sorted函数能做到这个功能:

python字典按值排序

6.利用Xmind构建思维导图

这部分没什么好说的,直接把官方文档的例子复制粘贴过来,把文件路径跟xmind里面的词设置成自己的就行了。

Xmind模块官方

注意:生成的Xmind文件需要用Xmind8这个版本打开,如果用Xmind2020会显示文档报错。