不再依赖hadoop/spark等工具就可以快速解决大规模中文分词统计频数问题

本文主要讲的是,我们在没有hadoop或spark这些大数据统计工具的情况下,如何对大规模的文章快速的获取分词并且统计词频的方法,尤其是百万级其以上的数据量效果明显。

【特别说明】我是经过实测的,可能和自己的机器有关,所以耗时上可能有些差异。但是效果肯定是明显的。好的方法就是要分享给大家。

1. 本文涉及到的语言、工具、数据、命令

语言:python

工具:jieba_fast [1] 使用cpython重写了jieba分词库中计算DAG和HMM中的vitrebi函数,速度得到大幅提升。

快速利用清华镜像安装jieba_fast工具,如下所示。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba_fast

数据:本次实验数据100w的文本、中文常用停用词表

命令:sort、uniq、grep

2. 统计步骤

第一步:分词。利用python写一个分词脚本,将所有文本分词并一个词语保存成一行到文件里面。

import jieba_fast as jieba

# 停用词表
GLOBAL_STOPWORD = set()
with open("stopwords.txt", "r", encoding="utf-8") as fin:
    for word in fin:
        GLOBAL_STOPWORD.add(fin)

# 保存result文件
fout = open("result.txt", "w", encoding)

with open("xxx.txt", "r", encoding="utf-8") as fin:
    for line in fin:
        line  = line.strip()
        words = jieba.lcut(line)    # 分词
        for w in words:
            if w not in GLOBAL_STOPWORD:    # 不在停用词表内
                fout.write("{}\n".format(w))

===================================================================
[result.txt文件结果展示]

你好
你好
联系
不上
好像
联系
不上
购物
接通
早就

【可喜的是跑这个文件耗时不到1分钟左右就搞定了。

第二步:利用shell命令进行统计和处理

从第一步获取到result.txt结果文件之后,我们开始进行命令统计,如下所示。

cat result.txt | sort | uniq -c > 分词结果统计.txt

===================================================================
[分词结果统计.txt文件结果展示]
2 你好
2 联系
2 不上
1 好像
1 购物
1 接通
1 早就

【可喜的是这种方法耗时不到1分钟就搞定了

对于一些有洁癖的小伙伴,想把结果导入excel中看的更加好看,但是生成的分词结果统计文档里面的词频因为有多有少会有空格问题,如下所示。

===================================================================
[分词结果统计.txt文件结果展示]
  9 ab
 13 ai
  5 and
  1 android
500 app
  1 appa
  1 appapp
  1 appc
 21 appip
  1 babc

对于这种问题也不用担心,一条命令就搞定了,如下所示。

cat 分词统计结果.txt | grep -o "[^ ]\+\( \+[^ ]\+\)*" > 分词统计最终结果.txt
===================================================================
[分词统计最终结果.txt文件结果展示]
9 ab
13 ai
5 and
1 android
500 app
1 appa
1 appapp
1 appc
21 appip
1 babc

【可喜的是这种方法耗时不到1分钟就搞定了

3. 小结

各位小伙伴【重要的事情说三遍】【重要的事情说三遍】【重要的事情说三遍】

首先:千万不要傻傻的循环分词之后,再循环统计,我试过这种方式跑了半天,也没有跑出来结果。

然后:也使用 sklearn.feature_extraction.text的CountVectorizer方法,结果把内存跑挂了。

所以我自己发现使用这种方法竟然3分钟就搞定了。赶快把干货分享给大家。

参考:

[1]GitHub - deepcs233/jieba_fast: Use C Api and Swig to Speed up jieba 高效的中文分词库

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

快乐的小凯

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值