jieba分词太慢,怎么办?找jieba_fast
原文鏈接:https://www.rtnzero.com/archives/272.html
有時候感覺處理一個幾十M的文本,要一分鐘才能好,然后調試時各種心焦!
下面舉個例子:
歸零有一個11.9M的文本文件,是一些抓取到的Python長尾關鍵詞,我們拿它做個實驗,看看用jieba分詞需要多久:
以下為測試代碼:
# 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_fast as jieba
我們再來看下測試結果:
可以看到分詞函數的運行時間因為本來就很少,所以看不出很明顯的變化。
但是生成器轉字典的函數運行時間縮短到了15.10241174697876秒
速度提升了43%
–
好了看完結果,趕緊去裝一個試下吧
安裝命令:
–
看到這個結果是不是還覺得不給勁?沒關系,接下去還可以祭出多進程處理,請關注下一篇《Python jieba分詞庫的多進程處理方法:pool.map()應用實例》
–
—-手—-工—-分—-割—-線—-
文末給大家分享一些本人在學習Python的過程當中,用到的資料(視頻、書籍、文檔、源碼)。
下載鏈接:https://pan.baidu.com/s/1_qtDzNyeDoAP62A9xxY9ow 提取碼:9t62
每一份資料我都精心整理過,留給需要的朋友
總結
以上是生活随笔為你收集整理的jieba分词太慢,怎么办?找jieba_fast的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习技术在机器阅读理解应用的研究进展
- 下一篇: 新闻 | 聚焦技术领域现状与发展阿里巴巴