Python 3.x NLP应用程序的多处理错误

Python 3.x NLP应用程序的多处理错误,python-3.x,multiprocessing,python-multiprocessing,multiprocess,Python 3.x,Multiprocessing,Python Multiprocessing,Multiprocess,我在做一个NLP项目。我有一个1.8亿字的海量数据集。在开始训练之前,我想纠正单词的拼写。为此,我使用TextBlob的拼写正确。因为TextBlob无论如何都需要一段时间来处理,所以要纠正1.8亿个单词的拼写将需要非常长的时间。下面是我的方法(代码如下): 加载语料库 使用nltk将语料库拆分为句子列表 标记器 多处理:将函数应用于步骤2生成的列表中的每个iterable项 这是我的密码: import codecs import multiprocessing import nltk fr

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

  • 加载语料库
  • 使用nltk将语料库拆分为句子列表 标记器
  • 多处理:将函数应用于步骤2生成的列表中的每个iterable项
  • 这是我的密码:

    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
    
    \u pickle.PicklingError:无法pickle:它与\uuuuu main\uuuuuu.spillcorrect不是同一个对象
    
    此错误是在我的代码中表示
    result=result.get()

    根据我可能是错误的猜测,我猜测并行处理组件成功完成了,并且能够将我的清理应用到每个iterable语句。但是,我无法检索这些结果

    有人能告诉我为什么会产生这个错误,以及我能做些什么来修复它吗。提前谢谢