- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NLTK 对一些相当大的数据集执行自然语言处理,并且希望利用我的所有处理器核心。似乎多处理模块就是我所追求的,当我运行以下测试代码时,我看到所有核心都在被利用,但代码永远不会完成。
执行相同的任务(无需多重处理)大约需要一分钟即可完成。
Debian 上的 Python 2.7.11。
from nltk.tokenize import word_tokenize
import io
import time
import multiprocessing as mp
def open_file(filepath):
#open and parse file
file = io.open(filepath, 'rU', encoding='utf-8')
text = file.read()
return text
def mp_word_tokenize(text_to_process):
#word tokenize
start_time = time.clock()
pool = mp.Pool(processes=8)
word_tokens = pool.map(word_tokenize, text_to_process)
finish_time = time.clock() - start_time
print 'Finished word_tokenize in [' + str(finish_time) + '] seconds. Generated [' + str(len(word_tokens)) + '] tokens'
return word_tokens
filepath = "./p40_compiled.txt"
text = open_file(filepath)
tokenized_text = mp_word_tokenize(text)
最佳答案
这个答案已经过时了。请改为查看 https://stackoverflow.com/a/54032108/610569
<小时/>这是一个骗子使用 sframe
进行多线程的方法:
>>> import sframe
>>> import time
>>> from nltk import word_tokenize
>>>
>>> import urllib.request
>>> url = 'https://raw.githubusercontent.com/Simdiva/DSL-Task/master/data/DSLCC-v2.0/test/test.txt'
>>> response = urllib.request.urlopen(url)
>>> data = response.read().decode('utf8')
>>>
>>> for _ in range(10):
... start = time.time()
... for line in data.split('\n'):
... x = word_tokenize(line)
... print ('word_tokenize():\t', time.time() - start)
...
word_tokenize(): 4.058445692062378
word_tokenize(): 4.05820369720459
word_tokenize(): 4.090051174163818
word_tokenize(): 4.210559129714966
word_tokenize(): 4.17473030090332
word_tokenize(): 4.105806589126587
word_tokenize(): 4.082665681838989
word_tokenize(): 4.13646936416626
word_tokenize(): 4.185062408447266
word_tokenize(): 4.085020065307617
>>> sf = sframe.SFrame(data.split('\n'))
>>> for _ in range(10):
... start = time.time()
... x = list(sf.apply(lambda x: word_tokenize(x['X1'])))
... print ('word_tokenize() with sframe:\t', time.time() - start)
...
word_tokenize() with sframe: 7.174573659896851
word_tokenize() with sframe: 5.072867393493652
word_tokenize() with sframe: 5.129574775695801
word_tokenize() with sframe: 5.10952091217041
word_tokenize() with sframe: 5.015898942947388
word_tokenize() with sframe: 5.037845611572266
word_tokenize() with sframe: 5.015375852584839
word_tokenize() with sframe: 5.016635894775391
word_tokenize() with sframe: 5.155989170074463
word_tokenize() with sframe: 5.132697105407715
>>> for _ in range(10):
... start = time.time()
... x = [word_tokenize(line) for line in data.split('\n')]
... print ('str.split():\t', time.time() - start)
...
str.split(): 4.176181793212891
str.split(): 4.116339921951294
str.split(): 4.1104896068573
str.split(): 4.140819549560547
str.split(): 4.103625774383545
str.split(): 4.125757694244385
str.split(): 4.10755729675293
str.split(): 4.177418947219849
str.split(): 4.11145281791687
str.split(): 4.140623092651367
请注意,速度差异可能是因为我在其他核心上运行了其他东西。但如果有更大的数据集和专用核心,您确实可以看到这种规模。
关于NLTK word_tokenizer 的 Python 多重处理 - 函数永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512594/
从 Redis 获取消息时,onDone:(){print('done')} 从未起作用。 import 'package:dartis/dartis.dart' as redis show PubS
昨天我玩了一些vim脚本,并设法通过循环来对当前输入的内容进行状态栏预测(请参见屏幕截图(灰色+黄色栏))。 问题是,我不记得我是怎么得到的,也找不到我用于该vim魔术的代码片段(我记得它很简单):它
我尝试加载 bash_completion在我的 bash (3.2.25) 中,它不起作用。没有消息等。我在我的 .bashrc 中使用了以下内容 if [ -f ~/.bash_completio
我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如在下面 fstcompose 命令我想比赛套路先建议 compose_filter= 标志,然后建议来自 [alt_seq
当我尝试在重定向符号后完成路径时,bash 完成的行为就好像它仍在尝试在重定向之前完成命令的参数一样。 例如: dpkg -l > /med标签 通过在 /med 之后点击 Tab我希望它完成通往 /
我的类中有几个 CAKeyframeAnimation 对象。 他们都以 self 为代表。 在我的animationDidStop函数中,我如何知道调用来自哪里? 是否有任何变量可以传递给 CAKe
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
有一个解决方案可以使用以下方法完成 NSTextField : - (NSArray *)control:(NSControl *)control textView:(NSTextView *)tex
我正在阅读 Passport 的文档,我注意到 serialize()和 deserialize() done()被调用而不被返回。 但是,当使用 passport.use() 设置新策略时在回调函数
在 ubuntu 11.10 上的 Firefox 8.0 中,尽管 img.complete 为 false,但仍会调用 onload 函数 draw。我设法用 setTimeout hack 解决
假设我有两个与两个并行执行的计算相对应的 future 。我如何等到第一个 future 准备好?理想情况下,我正在寻找类似于Python asyncio's wait且参数为return_when=
我正在寻找一种 Java 7 数据结构,其行为类似于 java.util.Queue,并且还具有“最终项目已被删除”的概念。 例如,应可以表达如下概念: while(!endingQueue.isFi
这是一个简单的问题。 if ($('.dataTablePageList')) { 我想做的是执行一个 if 语句,该语句表示如果具有 dataTablesPageList 类的对象也具有 menu
我用replaceWith批量替换了许多div中的html。替换后,我使用 jTruncate 来截断文本。然而它不起作用,因为在执行时,replaceWith 还没有完成。 我尝试了回调技巧 ( H
有没有办法调用 javascript 表单 submit() 函数或 JQuery $.submit() 函数并确保它完成提交过程?具体来说,在一个表单中,我试图在一个 IFrame 中提交一个表单。
我有以下方法: function animatePortfolio(fadeElement) { fadeElement.children('article').each(function(i
我刚刚开始使用 AndEngine, 我正在像这样移动 Sprite : if(pValueY < 0 && !jumping) { jumping =
我正在使用 asynctask 来执行冗长的操作,例如数据库读取。我想开始一个新 Activity 并在所有异步任务完成后呈现其内容。实现这一目标的最佳方法是什么? 我知道 onPostExecute
我有一个脚本需要命令名称和该命令的参数作为参数。 所以我想编写一个完成函数来完成命令的名称并完成该命令的参数。 所以我可以这样完成命令的名称 if [[ "$COMP_CWORD" == 1 ]];
我的应用程序有一个相当奇怪的行为。我在 BOOT_COMPLETE 之后启动我的应用程序,因此在我启动设备后它是可见的。 GUI 响应迅速,一切正常,直到我调用 finish(),按下按钮时,什么都没
我是一名优秀的程序员,十分优秀!