一个基于Python结巴分词的中文小说关键词频统计的hadoop小项目
上次已经搭建好了一个小集群,这里就利用它来统计中文词频。主要通过对哈利波特前7节的文本分词、非关键词的剔除,结合hadoop的排序功能,进行词频统计,介绍hadoop的简单项目应用。
本身统计词频jieba分词顺便就完成了,这里还是主要是用其做一个小项目,演示hadoop的排序基础用法。
主要写了三个程序文件,map.py、red.py、run.sh。
功能分别是:
Map.py:分词
Red.py:统计词频
Run.sh:启动hadoop
map文件
主要是利用jieba包分词,并且去除无用的一些词,然后将每个词输出来。
map.py文件我是这样写的
测试map.py文件:
为什么要测试,一个hadoop工程是由许多文件组成,测试通过可以保证在run文件写正确的情况下,整个hadoop可以正确执行。每写完一个功能文件,都需要测试一下,否则,程序出错的话,不好寻找错误。
[root@blue bin]#cat 哈利波特.txt | python map.py map_func |sort | uniq -c | awk '{print $2 "\t" $1}'| sort -k2 -nr | head -100
小小解释一下测试代码:首先显示文件内容,通过管道传给map.py文件,然后排序、才能统计词频,将打印默认(频率在前、词语在后改为词语在前、频率在后,看着舒服,也可以不改),然后根据词语频率倒序排序展示前100个词语、频率。
测试结果:
最终结果应该是上面这样的
red文件
Red文件主要是统计词频,原理是:经过hadoop排序后相同的词语是连续一起的,然后就能很简单方便地统计词频了。
测试red.py文件:
[root@blue bin]#cat 哈利波特.txt | python map.py map_func | sort | python red.py red_func | sort -k2 -nr | head -100
测试结果:
结果是一样的,看来red,py文件是没有问题的
run文件
将map、red文件结合,运行hadoop
执行run.sh文件之前建议还是要检查一下防火墙、机群是否正常:
[root@blue bin]#Jps
[root@blue bin]#Iptables –L
测试run.sh文件:
[root@blue bin]#./run.sh
对结果生成文件part-00000做一个变换排序
由于统计词频(red.py)时没有按照词频排序,所以这里需要做一个倒排序,查看前100个词。
[root@blue bin]#cat part-00000 | sort -k2 -nr | head -100
测试结果:
结果还是一致的。
欢迎留言、提建议、意见,觉得不错,记得【点赞、分享】!
猜你可能喜欢
终于等到你了!
再华丽的词藻也不过简单的分享!
爱生活、爱原创、爱分享!