NLTK - 修改多处理的嵌套 for 循环

NLTK - Modifying nested for loop for multiprocessing

目前,我有一个用于修改列表的嵌套 for 循环。我试图在使用多处理时创建相同的输出。

我当前的代码是,

for test in test_data:
    output.append([((ngram[-1], ngram[:-1],model.score(ngram[-1], ngram[:-1])) for ngram in 
    test])

其中test_data是生成器对象,model.score来自NLTK包。

我找到并尝试过的所有解决方案都不起作用(至少在我的情况下)。

有没有办法通过多处理获得相同的输出?

当谈到多处理时,我相信最简单的方法是使用 joblib 包...要使用这个包,您需要做的就是创建一个函数,它需要一个项目生成器和 returns 一项的结果。

在你的情况下,它看起来像这样:

from joblib import Parallel, delayed

def func(test):
    return [((ngram[-1], ngram[:-1], model.score(ngram[-1], ngram[:-1])) for ngram in test]


output = Parallel(n_jobs=4, backend="threading")(
            delayed(func)(test) \
                for test in test_data)

现在,output 是您要搜索的输出。您可以根据需要更改作业数量。但是,我建议将其设置为 multiprocessing.cpu_count(),在我的例子中是 4

您还可以查看 official documentation 以获取更多示例。