1
我正在一些相當大的數據集上使用NLTK進行自然語言處理,並希望利用我所有的處理器內核。似乎多處理模塊就是我所追求的,當我運行以下測試代碼時,我看到所有內核都在使用,但代碼從未完成。Python多處理NLTK word_tokenizer - 函數永不完成
執行相同的任務,無需多處理,大約在一分鐘內完成。
關於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)
好吧,對於任何遭受類似痛苦的人來說都是這樣 - 問題與通過pool.map()將文本傳遞給nltk.word_tokenize有關,它會通過字符**來遍歷字符串**字符。這爲word_tokenizer處理創建了一個巨大的迭代器,並且計算過程正在持續進行。通過將文本分塊成列表,其中項目與進程數匹配來解決。 *呼* –