原文链接: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. 轻松一刻:程序员的工作状态
  2. 10年卖下28家AI公司 苹果的AI吸星大法!
  3. SUN StorEdge 3320更改磁盘状态
  4. 思科路由器DHCP基础配置
  5. 计算机网络(网络层,运输层和应用层的一些tips)
  6. [react] react中的setState和replaceState的区别是什么?
  7. android.support.v7.widget.,关于android.support.v7.widget.RecyclerView的使用,总是找不到类...
  8. linux设置send时间,[转]Socket 的send,recv在windows与linux下的超时设置
  9. [doc文档]widows apache+myql+php
  10. D3 svg text标签控制
  11. Netscape 重构软件倒闭了,但我仍坚定地站重写!
  12. 近六成女受访者赞成“中国男配不上中国女”
  13. OFD转PDF格式免费在线转换
  14. react18 学习(一)
  15. 关于访问github时出现隐私设置错误您的连接不是私密连接问题的解决方案
  16. Abp Core 添加短信验证码登录(动态密码登录)
  17. ArcGIS10从入门到精通系列实验图文教程(附配套实验数据持续更新)
  18. BC20 MQTT与GPS功能测试
  19. 光伏组件价格跌势未歇 带动中上游供应链续跌
  20. 《互联网程序设计》课程:第1讲 JAVA图形窗口程序设计 (完整代码实现)

热门文章

  1. 单精度浮点数与十六进制转换
  2. 漫画:什么是区块链?
  3. ubuntu下面的git服务器搭建
  4. Git 忽略一些文件的提交
  5. linux 文件系统 簇 浪费空间,Linux rm -rf删除文件不释放空间的解决办法
  6. 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused
  7. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
  8. ES6~ES12——Array Includes、Object values、Object entries、Object fromEntries、flat、flatMap、空值合并运算符、可选链等
  9. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)
  10. [编程启蒙游戏] 1. 猜数字