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 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
Python OpenCV实现视频分帧
Jun 01 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
python在不同条件下的输入与输出
Feb 13 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
django 认证类配置实现
Nov 11 Python
python实现会员管理系统
Mar 18 Python
Python 文字识别
May 11 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
jQuery 入门讲解1
2009/04/15 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
react-native android状态栏的实现
2018/06/15 Javascript
vue mounted组件的使用
2018/06/18 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
python 获取et和excel的版本号
2009/04/09 Python
Python中处理时间的几种方法小结
2015/04/09 Python
python常见的格式化输出小结
2016/12/15 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
高速铁道技术专业求职信
2014/08/09 职场文书
个人收入证明模板
2014/09/18 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
工程款催款函
2015/06/24 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript