基于spark环境的中文文档词频统计程序(去停用词)

Linux系统下spark终端运行中文文档词频统计的python程序。

1.环境配置

*前提

(1) 由于spark是基于hadoop环境下运行的,所以要先完成hadoop的环境配置。
(2)完成hadoop环境配置后,再配置好spark环境。

这里采用的编程语言为python,完成以上两个步骤后,我们开始配置编程环境。

(1)在windows系统上下载python-3.7.3(不会的,网上有教程),并解压,然后将解压后的python包复制到spark文件夹下;
(2)在windows系统上下载jieba(python的一个中文分词库,不会的,网上有教程),并解压,同样将解压后的jieba包复制到spark文件夹下,然后进入spark终端jieba包setup.py文件所在目录下运行右侧代码: python setup.py install
例如
在这里插入图片描述

2.文件下载

(1)查询用的小说文件:在网上随意查找一篇小说,并复制到自己新建的txt文档中。
(2)中文停用词文件:在网上百度‘中文停用词’,大概有1890个左右,复制到自己新建的txt文档中。
(3)python程序:先在windows系统下编写测试好你的python程序是否可用,这样复制到linux系统下只需要改动一点点即可。将测试好的python程序保存为.py文件。

spark终端python程序运行代码
[yyl@master spark-2.4.2-bin-hadoop2.7]$ spark-submit --master spark://10:7077 dd.py

3.文件转码

(1)避免出现一切编码不匹配等问题(如下图),准备的中文中文停用词,查询用的小说,python程序等,统一使用utf-8编码。
在这里插入图片描述
(2)由于linux系统无法更改文档编码,以下操作均在windows下进行。将python程序文件以记事本方式打开,另存为如下图,将编码选为UTF-8,保存即可(如下图)。中文停用词及查询的txt文本文档均修改为UTF-8编码。然后复制到虚拟机中。
在这里插入图片描述
(3)在linux系统下,找到刚才复制过来的python文件,使用gedit打开python程序,并在里面添加如下代码:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

(4)如果还是出现以下乱码问题,
在这里插入图片描述
则需进入spark文件夹的python文件下修改Python本环境:
在Python的Lib\site-packages文件夹下新建一个sitecustomize.py文件,内容为:

#coding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

这样程序就可以运行了
在这里插入图片描述

spark终端的程序代码如下

import sys
import jieba 
reload(sys)
sys.setdefaultencoding('utf8')

#读取数据
text = open('/home/yyl/u8xiaoshuo8.txt','r').read()
len(text)

#全部字符变成小写字符
text = text.lower()
 
#读取停用词,创建停用词表
stwlist = [line.strip() for line in open ('/home/yyl/u8stop.txt').readlines()]
 
#先进行分词
words = jieba.cut(text,cut_all = False,HMM = True)
#cut_all:是否采用全模式
#HMM:是否采用HMM模型
 
#去停用词,统计词频
word_ = {}
for word in words:
    if word.strip() not in stwlist:
        if len(word) > 1:
            if word != '\t':
                if word != '\r\n':
                    #计算词频
                    if word in word_:
                        word_[word] += 1
                    else:
                        word_[word] = 1
 
#将词汇和词频以元组的形式保存
word_freq = []
for word,freq in word_.items():
    word_freq.append((word,freq))
 
#进行降序排列
word_freq.sort(key = lambda x:x[1],reverse = True)
 
#查看前200个结果
for i in range(200):
     word,freq =word_freq[i]
     print('{0:10}{1:5}'.format(word,freq))

with open('/home/yyl/shuchu.txt','w') as fw:#将结果保存到shuchu文件
          for word,freq in str:
                       fw.write('%s,%d\n' %(word,freq))

猜你喜欢

转载自blog.csdn.net/weixin_43488742/article/details/90701900
今日推荐