Python 在Spark中使用标点符号的未闭合字符类
我正在尝试构建一个正则表达式模式,它将从字符串中删除标点符号。我决定使用Python 在Spark中使用标点符号的未闭合字符类,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在尝试构建一个正则表达式模式,它将从字符串中删除标点符号。我决定使用字符串库中的标点符号。但是,当我执行它时,Spark返回一个错误,即有一个未闭合字符 我怀疑标点符号中的字符在执行过程中会关闭引号。我有一种感觉,这应该是简单的修复,但我不知道如何。我的代码如下: from pyspark.sql.functions import regexp_replace, trim, col, lower import string def removePunctuation(column):
字符串库中的标点符号。但是,当我执行它时,Spark返回一个错误,即有一个未闭合字符
我怀疑标点符号
中的字符在执行过程中会关闭引号。我有一种感觉,这应该是简单的修复,但我不知道如何。我的代码如下:
from pyspark.sql.functions import regexp_replace, trim, col, lower
import string
def removePunctuation(column):
no_punct = regexp_replace(column, string.punctuation, '')
lowered = lower(no_punct)
cleaned = strip(lowered)
return cleaned
我得到这个错误org.apache.spark.SparkException:作业由于阶段失败而中止:阶段86.0中的任务0失败了1次,最近的失败:阶段86.0中的任务0.0丢失(TID 3709,localhost):java.util.regex.PatternSyntaxException:索引31附近未关闭的字符类
regexp_replace(column, "\p{Punct}", "")
要使用字符串.标点符号
,您必须对单个字符进行转义并将其放入字符集中,但这很容易出错,而且很难看:
import re
regexp_replace(column, "[{0}]".format(re.escape(string.punctuation)), "")
请注意,下划线被视为合法的字母数字字符,因此需要特别删除。您可能只需要包含您想要的内容:数字、字母和空格
return lower(trim(regexp_replace(regexp_replace(column, '[^\w\s]', ''),'_','')))
真是太棒了。你在哪里找到的?
return lower(trim(regexp_replace(regexp_replace(column, '[^\w\s]', ''),'_','')))