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实现统计英文单词个数及字符串分割代码
May 28 Python
python数据类型_字符串常用操作(详解)
May 30 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
如何在django中运行scrapy框架
Apr 22 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
浅析Django接口版本控制
Jun 26 Python
python如何查找列表中元素的位置
May 30 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP 模板高级篇总结
2006/12/21 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
旅游网创业计划书
2014/01/31 职场文书
暑期社会实践方案
2014/02/05 职场文书
运动会方阵解说词
2014/02/12 职场文书
企业管理标语
2014/06/10 职场文书
重点工程汇报材料
2014/08/27 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL