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 相关文章推荐
Django接受前端数据的几种方法总结
Nov 04 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
python实现小球弹跳效果
May 10 Python
Django项目后台不挂断运行的方法
Aug 31 Python
Python 列表的清空方式
Jan 13 Python
通过python连接Linux命令行代码实例
Feb 18 Python
Python任务自动化工具tox使用教程
Mar 17 Python
Python中的With语句的使用及原理
Jul 29 Python
PyTorch安装与基本使用详解
Aug 31 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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初学者头痛的十四个问题
2006/07/12 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
JavaScript异步加载浅析
2014/12/28 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python补齐字符串长度的实例
2018/11/15 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
交通安全演讲稿
2014/01/07 职场文书
师德个人剖析材料
2014/02/02 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
党员民主评议自我评价
2014/10/20 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书