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判断某个用户对某个文件的权限
Oct 13 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
python实现连连看辅助(图像识别)
Mar 25 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python实现AI自动抠图实例解析
Mar 05 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
javascript之更有效率的字符串替换
2008/08/02 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
vue中进行微博分享的实例讲解
2019/10/14 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
python random从集合中随机选择元素的方法
2019/01/23 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
党课培训心得体会
2014/09/02 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
浅谈MySQL中的六种日志
2022/03/23 MySQL
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers