用到了几个库
import re # 正则表达式库
import collections # 词频统计库
import jieba # 结巴分词
用之前在命令行执行:pip install 库名称。现在包/库管理基本是一种通用的模式。Node.js的npm,VS里面的nuget,这个跟我们从苹果或安卓应用市场下载应用一样。应该市场面对最终用户,包管理面对程序员。比原来那种,在浏览器里面先搜,然后下载,再引入方便了不少。
npm和nuget通常是基于项目的,在每个项目文件夹下有对应的类似package.json文件管理包。pip是通常是全局的。有介绍用Anaconda的。提到全局和虚拟环境。具体后面再看吧
基本步骤是:
1、文本预处理:用正则把特殊符号去掉,如果不处理,可能逗号的词频非常高
2、文本分词:用jieba进行分词
3、去停用词:根据停用词库,停用词就是对我们没意义的词,比如:的。统计出100个“的”来,没啥意义
4、词频统计:用collections统计词频
代码如下:
import re # 正则表达式库
import collections # 词频统计库
# import numpy as np # numpy数据处理库
import jieba # 结巴分词
# import nltk
# nltk.download()
# from nltk.corpus import stopwords
def wordcloud(string_data):
# 1、文本预处理
pattern = re.compile(u'\t|\n|\.|\\|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
# 2、文本分词
seg_list_exact = jieba.cut(string_data, cut_all = False) # 精确模式分词
object_list = []
remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
u'通常',u'如果',u'我们',u'需要',u',',u'the',u'/'] # 自定义去除词库
# remove_words.append(stopwords.words('english'))
# 3、去停用词
for word in seg_list_exact: # 循环读出每个分词
if word not in remove_words: # 如果不在去除词库中
object_list.append(word) # 分词追加到列表
# 4、词频统计
word_counts = collections.Counter(object_list) # 对分词做词频统计
word_counts_top = word_counts.most_common(50) # 获取前10最高频的词
return word_counts_top
执行后,把词频打印出来:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs4WNXp1dCNjYshnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0MTNzEjMzcTM1ADOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
停用词我们可以直接使用已经存在的库,比如用nltk,网上还有维护好的中英文停用词2000来个
确实:用了不多的代码实现了功能。特别是这句代码:if word not in remove_words,简单粗暴。这么白话文呢。网上下载了一个16万字的英文小说,测了下,速度还挺快。打印了一下时间。从读取文件到计算出词频。用时6秒。算是超预期了
后面python是可以根据词频生成词云图片的,我们项目前端使用vue,后端是java,爬虫和分析用到了python。所以统计出词频就可以了。前端用echarts来显示:参考:https://blog.csdn.net/leoppeng/article/details/119004137
python有web框架,可以完成java后端的工作。因为没用过,相对于java比较完善的技术栈如:spring这一套,也不好对比。像django这种框架。已非常完善了:mvc,orm,路由,表单,权限。能用到的基本都有。
接下来准备把词频统计功能作为WebAPI公开调用。用java发送post请求返回json格式的词频