Я создал пользовательскую функцию для очистки большого текста с помощью регулярных выражений в Python 3.7. Я использую jupyter notebook 6.0.3
import numpy as np
import pandas as pd
import re
import string
def pre_process(arr):
legal_chars = string.ascii_letters + string.punctuation + string.digits + string.whitespace + "äÄöÖüÜ"
while " " in arr: # removes unnecessary empty spaces
arr = arr.replace(" ", " ")
while "\n\n" in arr: # removes unnecessary new lines
arr = arr.replace("\n\n", "\n")
for char in arr: # removes illegal charachters
if char not in legal_chars:
arr=arr.replace(char,"")
pattern4 = r"[\d]+\W[\d]+" # remove long numbers separated with non-digit
pattern4_1 = r"[\d]+\W[\d]+"
arr = re.sub(pattern4, '1', arr)
arr = re.sub(pattern4_1, '', arr)
pattern5 = r"\W[\d]+\W[\d]+\W" # remove long numbers enclosed by non-digit
pattern6 = r"\W[\d]+\W"
arr = re.sub(pattern5, '.', arr)
arr = re.sub(pattern6, '', arr)
pattern1 = r"\d{5,}" # remove long numbers
arr = re.sub(pattern1, '', arr)
return arr
При запуске в соответствующем столбце в моем меньшем тестовом фрейме непосредственно с .apply - он возвращает ожидаемые результаты и текст очищается.
Однако мне нужно применить это к гораздо большему массиву данных, и я хотел попробовать ускорить процесс с помощью многопроцессорного пакета.
Я использовал:
import multiprocessing as mp
with mp.Pool() as pool:
df_t["Text"] = pool.map(pre_process,df_t["Text"])
Я успешно использовал многопроцессорность на одном и том же фрейме данных со встроенными функциями, но при запуске с моей пользовательской функцией ничего не происходит. Ядро просто зависает. Я попытался с pool.apply (), а также без результатов.
Может ли это быть проблемой в моей функции или я неправильно использую многопроцессорную обработку?
Я попытался применить предложения здесь: multiprocessing.Pool: Когда использовать apply, apply_asyn c или map? , но без изменений.