查看原文
其他

一个基于Python结巴分词的中文小说关键词频统计的hadoop小项目

柯广 数据科学专栏 2022-10-15

上次已经搭建好了一个小集群,这里就利用它来统计中文词频。主要通过对哈利波特前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


测试结果:


结果还是一致的。


欢迎留言、提建议、意见,觉得不错,记得【点赞、分享】!


猜你可能喜欢

基于虚拟机的hadoop平台简单搭建

Python数据挖掘包——pandas包用法

jieba分词Python与R语言用法

《人民的名义》小说文本分析

终于等到你了!


再华丽的词藻也不过简单的分享!

爱生活、爱原创、爱分享!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存