我创建了一个自定义函数来通过Python 3.7中的正则表达式清除大文本主体。我正在使用jupyter笔记本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: When to use apply, apply_async or map?但没有变化。
我看不到您的代码有任何问题。实际上,我可以在本地计算机上运行它,而在虚拟pandas
DataFrame上没有问题。我对问题的潜在原因有一些想法。我之前在PyCharm 2019上使用python 3.7的multiprocessing
包遇到问题。我通过降级到PyCharm 2018和python 3.6解决了该问题。我在虚拟DataFrame上使用此配置运行了您的代码,没有任何问题。
您可以检查有关问题的link(如果我的猜测当然是正确的,]