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生成url短链接的方法
May 04 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python实现矩阵打印
Mar 02 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Python求正态分布曲线下面积实例
Nov 20 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
Python实现抖音热搜定时爬取功能
Mar 16 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP xpath()函数讲解
2019/02/11 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
对python append 与浅拷贝的实例讲解
2018/05/04 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python 实现矩阵按对角线打印
2019/11/29 Python
如何通过python实现全排列
2020/02/11 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
Collection和Collections的区别
2016/05/02 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
主持人大赛开场白
2015/05/29 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript