Ошибка многопроцессорной обработки для приложения НЛП - PullRequest
0 голосов
/ 09 января 2019

Я работаю над проектом НЛП. У меня огромный массив данных из 180 миллионов слов. Прежде чем начать тренировку, я хочу исправить написание слов. Для этого я использую правильное заклинание TextBlob. Поскольку TextBlob все равно обрабатывается, это будет безумно много времени, чтобы исправить написание 180 миллионов слов. Итак, вот мой подход (код будет следовать после этого):

  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()

Исходя из моего, вероятно, неправильного предположения, я предполагаю, что компонент параллельной обработки завершился успешно и смог применить мою очистку к каждому повторяемому предложению. Однако я не могу получить эти результаты.

Может кто-нибудь сказать мне, почему генерируется эта ошибка, и что я могу сделать, чтобы исправить ее. Заранее спасибо!

...