python多進程提取處理大量文本的關鍵詞方法
經(jīng)常需要通過python代碼來提取文本的關鍵詞,用于文本分析。而實際應用中文本量又是大量的數(shù)據(jù),如果使用單進程的話,效率會比較低,因此可以考慮使用多進程。
python的多進程只需要使用multiprocessing的模塊就行,如果使用大量的進程就可以使用multiprocessing的進程池--Pool,然后不同進程處理時使用apply_async函數(shù)進行異步處理即可。
實驗測試語料:message.txt中存放的581行文本,一共7M的數(shù)據(jù),每行提取100個關鍵詞。
代碼如下:
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from multiprocessing import Pool,Queue,Process
import multiprocessing as mp
import time,random
import os
import codecs
import jieba.analyse
jieba.analyse.set_stop_words("yy_stop_words.txt")
def extract_keyword(input_string):
#print("Do task by process {proc}".format(proc=os.getpid()))
tags = jieba.analyse.extract_tags(input_string, topK=100)
#print("key words:{kw}".format(kw=" ".join(tags)))
return tags
#def parallel_extract_keyword(input_string,out_file):
def parallel_extract_keyword(input_string):
#print("Do task by process {proc}".format(proc=os.getpid()))
tags = jieba.analyse.extract_tags(input_string, topK=100)
#time.sleep(random.random())
#print("key words:{kw}".format(kw=" ".join(tags)))
#o_f = open(out_file,'w')
#o_f.write(" ".join(tags)+"\n")
return tags
if __name__ == "__main__":
data_file = sys.argv[1]
with codecs.open(data_file) as f:
lines = f.readlines()
f.close()
out_put = data_file.split('.')[0] +"_tags.txt"
t0 = time.time()
for line in lines:
parallel_extract_keyword(line)
#parallel_extract_keyword(line,out_put)
#extract_keyword(line)
print("串行處理花費時間{t}".format(t=time.time()-t0))
pool = Pool(processes=int(mp.cpu_count()*0.7))
t1 = time.time()
#for line in lines:
#pool.apply_async(parallel_extract_keyword,(line,out_put))
#保存處理的結果,可以方便輸出到文件
res = pool.map(parallel_extract_keyword,lines)
#print("Print keywords:")
#for tag in res:
#print(" ".join(tag))
pool.close()
pool.join()
print("并行處理花費時間{t}s".format(t=time.time()-t1))
運行:
python data_process_by_multiprocess.py message.txt
message.txt是每行是一個文檔,共581行,7M的數(shù)據(jù)
運行時間:

不使用sleep來掛起進程,也就是把time.sleep(random.random())注釋掉,運行可以大大節(jié)省時間。

以上這篇python多進程提取處理大量文本的關鍵詞方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python深度學習人工智能BackPropagation鏈式法則
這篇文章主要為大家介紹了python深度學習人工智能BackPropagation鏈式法則的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python實現(xiàn)C#代碼生成器應用服務于Unity示例解析
為了滿足項目需要,需要實現(xiàn)一個c#代碼生成器,為此設計了一個語法模板適用于Unity的代碼生成器。本次使用了Python的Template模板,使用python開發(fā)2021-10-10

