Я работаю над проектом НЛП. У меня огромный массив данных из 180 миллионов слов. Прежде чем начать тренировку, я хочу исправить написание слов. Для этого я использую правильное заклинание TextBlob. Поскольку TextBlob все равно обрабатывается, это будет безумно много времени, чтобы исправить написание 180 миллионов слов. Итак, вот мой подход (код будет следовать после этого):
- Корпус нагрузки
- Разделить корпус на список предложений, используя nltk
токенизатор
- Многопроцессорность: применить функцию к каждому итерируемому элементу списка, сгенерированному на шаге 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()
Исходя из моего, вероятно, неправильного предположения, я предполагаю, что компонент параллельной обработки завершился успешно и смог применить мою очистку к каждому повторяемому предложению. Однако я не могу получить эти результаты.
Может кто-нибудь сказать мне, почему генерируется эта ошибка, и что я могу сделать, чтобы исправить ее. Заранее спасибо!