python多进程提取处理大量文本的关键词方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python多进程提取处理⼤量⽂本的关键词⽅法
经常需要通过python代码来提取⽂本的关键词,⽤于⽂本分析。
⽽实际应⽤中⽂本量⼜是⼤量的数据,如果使⽤单进程的话,效率会⽐较低,因此可以考虑使⽤多进程。
python的多进程只需要使⽤multiprocessing的模块就⾏,如果使⽤⼤量的进程就可以使⽤multiprocessing的进程池--Pool,然后不同进程处理时使⽤apply_async函数进⾏异步处理即可。
实验测试语料:message.txt中存放的581⾏⽂本,⼀共7M的数据,每⾏提取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的数据
运⾏时间:
不使⽤sleep来挂起进程,也就是把time.sleep(random.random())注释掉,运⾏可以⼤⼤节省时间。
以上这篇python多进程提取处理⼤量⽂本的关键词⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。