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使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
Python中import机制详解
Nov 14 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
python dlib人脸识别代码实例
Apr 04 Python
python列表生成器迭代器实例解析
Dec 19 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python可视化学习之seaborn调色盘
Feb 24 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
利用static实现表格的颜色隔行显示
2006/10/09 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
高中军训感言600字
2014/03/11 职场文书
婚礼答谢词
2015/01/04 职场文书
工作年限证明模板
2015/06/15 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技