首页 > 解决方案 > NLP 应用程序的多处理错误

问题描述

我正在做一个 NLP 项目。我有一个 1.8 亿字的海量数据集。在开始训练之前,我想纠正单词的拼写。为此,我使用 TextBlob 的拼写正确。因为 TextBlob 无论如何都需要一段时间来处理,所以纠正 1.8 亿个单词的拼写将是一个非常长的时间。所以这是我的方法(代码将在此之后出现):

  1. 加载语料库
  2. 使用 nltk 分词器将语料库拆分为句子列表
  3. 多处理:将函数应用于从步骤 2 生成的列表的每个可迭代项

这是我的代码:

import codecs
import multiprocessing
import nltk

from textblob import TextBlob
from nltk.tokenize import sent_tokenize

class SpellCorrect():

     def __init__(self):
         pass

     def load_data(self, path):
         with codecs.open(path, "r", "utf-8") as file:
             data = file.read()
         return sent_tokenize(data)

     def correct_spelling(self, data):
         data = TextBlob(data)
         return str(data.correct())

     def merge_cleaned_corpus(self, result, path):
         result = " ".join(temp for temp in result)
         with codecs.open(path, "a", "utf-8") as file:
             file.write(result)

if __name__ == "__main__":
    SpellCorrect = SpellCorrect()
    data = SpellCorrect.load_data(path)
    correct_spelling = SpellCorrect.correct_spelling
    pool = multiprocessing.Pool(processes = multiprocessing.cpu_count())
    result = pool.apply_async(correct_spelling, (data, ))
    result = result.get()
    SpellCorrect.merge_cleaned_corpus(tuple(result), path)

当我运行它时,我收到以下错误:

_pickle.PicklingError: Can't pickle <class '__main__.SpellCorrect'>: it's not the same object as __main__.SpellCorrect

此错误是在我的代码中的行中生成的result = result.get()

从我可能错误的猜测中,我猜测并行处理组件成功完成并且能够将我的清理应用于每个可迭代的句子。但是,我无法检索这些结果。

有人可以告诉我为什么会产生这个错误,我能做些什么来解决它。提前致谢!

标签: python-3.xmultiprocessingpython-multiprocessingmultiprocess

解决方案


推荐阅读