原文链接:https://www.rtnzero.com/archives/272.html

有时候感觉处理一个几十M的文本,要一分钟才能好,然后调试时各种心焦!

下面举个例子:

归零有一个11.9M的文本文件,是一些抓取到的Python长尾关键词,我们拿它做个实验,看看用jieba分词需要多久:

以下为测试代码:

# -*- coding: utf-8 -*-
# Author : Alven.Gu
import time
import jieba

def timmer(func):
    def deco(*args, **kwargs):
        print('\n函数:\033[32;1m{_funcname_}()\033[0m 开始运行:'.format(_funcname_=func.__name__))
        start_time = time.time()
        res = func(*args, **kwargs)
        end_time = time.time()
        print('函数: \033[32;1m{_funcname_}()\033[0m 运行了 {_time_}秒'
              .format(_funcname_=func.__name__, _time_=(end_time - start_time)))
        return res

return deco

@timmer
def chinese_word_segmentation(txt_file_path, seg_mode='search'):
    with open(txt_file_path, 'r', encoding='utf-8-sig')as f:
        all_text_in_file = f.read().replace('\r', '').replace('\n', '').replace('\t', '')
    if seg_mode == 'accurate':
        word_generator = jieba.cut(all_text_in_file)
    elif seg_mode == 'full':
        word_generator = jieba.cut(all_text_in_file, cut_all=True)
    else:
        word_generator = jieba.cut_for_search(all_text_in_file)
    return word_generator

@timmer
def generator2dict(word_generator):
    word_dict = {}
    for word in word_generator:
        if len(word) < 1:
            continue
        else:
            word_dict[word] = word_dict.get(word, 0) + 1
    return word_dict

def main():
    word_generator = chinese_word_segmentation('python长尾词.txt')
    word_dict = generator2dict(word_generator)

if __name__ == '__main__':
    main()

简述一下流程:
1、程序启动会从main函数开始,先执行分词,分词函数会返回一个生成器。
2、再执行生成器转字典函数
两个函数前都加上了timmer装饰器,所以会打印函数运行所消耗的时间
看下结果:

可以看到分词函数返回生成器所用的时间非常的少,只有消耗了0.17186450958251953秒。
而生成器转字典消耗了26.730547428131104秒。
而这个jieba库慢就慢在这个返回的生成器的效率上。

接下去,我们使用jieba_fast做个对比,对代码做以下修改:
只修改以下语句,其它内容不作修改

# import jieba
import jieba_fast as jieba

我们再来看下测试结果:

可以看到分词函数的运行时间因为本来就很少,所以看不出很明显的变化。
但是生成器转字典的函数运行时间缩短到了15.10241174697876
速度提升了43%

好了看完结果,赶紧去装一个试下吧
安装命令:

pip3 install jieba_fast


看到这个结果是不是还觉得不给劲?没关系,接下去还可以祭出多进程处理,请关注下一篇《Python jieba分词库的多进程处理方法:pool.map()应用实例》

—-手—-工—-分—-割—-线—-

文末给大家分享一些本人在学习Python的过程当中,用到的资料(视频、书籍、文档、源码)。

下载链接:https://pan.baidu.com/s/1_qtDzNyeDoAP62A9xxY9ow 提取码:9t62

每一份资料我都精心整理过,留给需要的朋友

jieba分词太慢,怎么办?找jieba_fast相关推荐

  1. 自然语言处理课程(二):Jieba分词的原理及实例操作

    上节课,我们学习了自然语言处理课程(一):自然语言处理在网文改编市场的应用,了解了相关的基础理论.接下来,我们将要了解一些具体的.可操作的技术方法. 作为小说爱好者的你,是否有设想过通过一些计算机工具 ...

  2. jieba分词 自定义词表简介

    一.jieba分词增加自定义词表 在使用jieba分词时经常会发现一些未登录词,因此增加领域词表就变得很重要,下面提供增加几种途径: 1.领域权威词汇字典 2.搜狗输入法领域词库.百度输入法领域词库 ...

  3. jieba分词的源码解析,并从零实现自己的分词器

    分词器大家都很熟悉,这里我们从源码分析下jieba分词器的实现 github地址: https://github.com/fxsjy/jieba 分析源码前我们分析下jieba的分词是怎么实现的 1 ...

  4. NLP之jieba分词原理简析

    一.jieba介绍 jieba库是一个简单实用的中文自然语言处理分词库. jieba分词属于概率语言模型分词.概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大. j ...

  5. jieba分词浅析---关键词提取

    最近公司在做一个分词的项目,所以对分词有所研究,再经过整个项目的不断调整逐渐对分词有了更深入的了解,下面是我自己对分词的一些理解,希望能对大家有一定的帮助,也希望大家多多指点,如果有什么不对的地方请尽 ...

  6. 实践:jieba分词和pkuseg分词、去除停用词、加载预训练词向量

    一:jieba分词和pkuseg分词 原代码文件 链接:https://pan.baidu.com/s/1J8kmTFk8lec5ubfwBaSnLg 提取码:e4nv 目录: 1:分词介绍: 目标: ...

  7. 中文分词的基本原理以及jieba分词的用法

    结巴分词是国内程序员用Python开发的一个中文分词模块,可能是最好的Python中文分词组件? 中文分词的原理 – 1.中文分词(Chinese Word Segmentation) 指的是将一个汉 ...

  8. jieba分词流程及部分源码解读(一)

    首先我们来看一下jieba分词的流程图: 结巴中文分词简介 1)支持三种分词模式: 精确模式:将句子最精确的分开,适合文本分析 全模式:句子中所有可以成词的词语都扫描出来,速度快,不能解决歧义 搜索引 ...

  9. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

最新文章

  1. Matlab的内部常数
  2. js window.event 对象学习
  3. 奥特曼系列ol光元在哪个服务器,奥特曼系列ol光元怎么合理使用
  4. freecodecamp_freeCodeCamp.org隐私权政策:问题与解答
  5. 备份恢复linux,备份和恢复Linux系统
  6. 这个没去大厂的程序猿,用 4 年时间证明自己做对了!
  7. VS启动调试速度异常的缓慢问题
  8. 王道机试指南读后总结-1
  9. g++编译支持c++11
  10. FreeBSD从零开始---Web服务器搭建(二)
  11. 网络存储技术 (HUAWEI)
  12. 电子计算机系统集成费用,信息服务资费标准 计算机信息系统集成类.pdf
  13. 西北农林科技大学CSDN高校俱乐部运营策划书
  14. 投影幕布尺寸计算器_投影幕尺寸是怎么算的
  15. 微信h5支付 php sdk_TP5专用微信支付SDK使用简介
  16. linux 6.7 远程端口,CentOS6.7安装vncserver及xrdp实现远程桌面
  17. Excel通过身份证号提取出生年月日(生日)/计算截至当前年龄
  18. 互联网公司的主要角色以及其职责
  19. Emgucv摄像头使用
  20. python语音合成并播放_语音合成篇

热门文章

  1. 把编译时间加入到目标文件
  2. 计算机一级考试教学设计,《全国计算机一级考试》教学设计说明.doc
  3. string contains不区分大小写_String基础复习
  4. rds基于什么开发_java rds
  5. 图数据库_ONgDB图数据库与Spark的集成
  6. MyBatis动态SQL_多表查询_延迟加载_缓存
  7. nginx集群_使用Nginx+Tomcat+keepalived 搭建高性能高可用性负载均衡集群
  8. Express 路由模块化以及 Express 应用程序生成器
  9. 二、前端pink老师的CSS定位学习笔记(超详细,简单易懂)
  10. LeetCode 1877. 数组中最大数对和的最小值(贪心)