Python入门。
- 数据源:50w个
怎么
长尾词 - 编程语言:
Python
- 文件格式:
逗号分隔的csv
、UTF-8
“思路: 对每个长尾词进行切词处理,无效词&过长过短词过滤,词频统计得到TopN词根;针对下述两层级进行相同处理后,得到3个层级的TopN词根思维导图;
”
层级越深,长尾词的归类更为精准,通常三层就已足够;不同层级TopN 阈值可设置绝对值如5000,100,50;
也有大佬是按照二八准则筛选出每个层级覆盖80%词频的TopN个词根;
每一步功能需要的模块就像是单独的乐高积木,想实现最终结果,只需把每个小积木在正确的地方搭好就可以实现一个伟大的东西。
本文就不贴我的九流代码上来丢人现眼,主要说下我整个实现中用到的模块以及对应的学习资源,均可通过百度搜到相关的使用方法。
基础知识储备:
- 循环:
for
- 判断:
if..else...
- 异常:
try...except
- 数据结构:
list
、dict
、set
- 函数:
sorted()
、sum()
、len()
- 第三方库:
pandas
、xmind
、jieba
后面的内容推荐考虑自学Python
的同学看
- 读取csv文件
- 过滤长短词
- 切词处理&停用词加载
- 倒排索引文档建立
- sorted对词根进行词频排序
- 利用Xmind构建思维导图
1.读取csv文件
为什么要用 csv 而不是 xls?
因为Excel的xls/xlsx有行数限制,最大为65536行;如果数据量>65536,建议csv或者txt。前者看起来美观直接,后者加载起来更快。
“我个人就习惯用的csv格式文件,代码也是用的pandas.read_csv”
pandas.read_csv可以直接读取csv文件,自带参数有很多,有兴趣的话可以去官方文档看下,
像我用得多的就是sep
、encoding
两个参数,一个指定切割符,一个指定编码格式(一般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.cut
跟for...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会显示文档报错。