python多进程提取处理大量文本的关键词方法


Posted in Python onJune 05, 2018

经常需要通过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的数据

运行时间:

python多进程提取处理大量文本的关键词方法

不使用sleep来挂起进程,也就是把time.sleep(random.random())注释掉,运行可以大大节省时间。

python多进程提取处理大量文本的关键词方法

以上这篇python多进程提取处理大量文本的关键词方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python如何通过protobuf实现rpc
Mar 06 Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
PHP实现发送和接收JSON请求
Jun 07 Python
python requests.post带head和body的实例
Jan 02 Python
Django框架实现分页显示内容的方法详解
May 10 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
python变量的作用域是什么
May 26 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
使用python进行文本预处理和提取特征的实例
Jun 05 #Python
python 用正则表达式筛选文本信息的实例
Jun 05 #Python
python和shell获取文本内容的方法
Jun 05 #Python
python 查找文件名包含指定字符串的方法
Jun 05 #Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 #Python
Python实现的读写json文件功能示例
Jun 05 #Python
python计算日期之间的放假日期
Jun 05 #Python
You might like
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
分享php多功能图片处理类
2016/05/15 PHP
jquery uaMatch源代码
2011/02/14 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
Python Deque 模块使用详解
2014/07/04 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
python生成器generator用法实例分析
2015/06/04 Python
python3中str(字符串)的使用教程
2017/03/23 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
机械制造专业个人的自我评价
2013/12/28 职场文书
给女儿的表扬信
2014/01/18 职场文书
投标保密承诺书
2014/05/19 职场文书
企业金融服务方案
2014/06/03 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
教师个人年度总结
2015/02/11 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers