python - 正则表达式:摆脱连续的标点符号
问题描述
我试图使用以下代码清理列表中的单词:
#define function to clean list of words
def clear_list(words_list):
regex = re.compile('[\w\d]{2,}', re.U)
filtered = [i for i in words_list if regex.match(i)]
return filtered
clear_list_udf = sf.udf(clear_list, ArrayType(StringType()))
items = items.withColumn("clear_words", clear_list_udf(sf.col("words")))
我只需要不带标点符号的大于 1 个字母的单词。但是在以下情况下我会遇到问题:
我有什么:
["""непутевые, заметки"", с, дмитрием, крыловым"] -->
[заметки"", дмитрием, крыловым"]
我需要什么:
["""непутевые, заметки"", с, дмитрием, крыловым"] -->
[непутевые, заметки, дмитрием, крыловым]
解决方案
您可以使用 regexp_replace 然后过滤 df 以在 pyspark 本身中实现结果。
我们应该尽可能避免使用 UDF,因为 UDF 就像一个会产生火花的黑匣子。它不能有效地对其进行优化。在这里阅读更多
from pyspark.sql.functions import regexp_replace, col, length
df = df.select(regexp_replace(col("col_name"), "[^a-zA-Z0-9]", ""))
df = df.where(length(col("col_name")) >= 2)
推荐阅读
- angularjs - 延迟加载 MonacoEditor
- django - Django ModelForms 忽略了一个干净的字段方法
- php - 什么是进行比较的最快和最有效的方法(PHP)
- javascript - 无法解决承诺链
- ios - 如何在任务切换器中显示锁定屏幕并正确恢复
- ios - ARKit 快照给出了变形的模型
- javascript - 使用 javascript 在单页应用程序中获取以前的站点 url
- asp.net - 间歇性 IndexOutOfRangeException 提示缺少 SQL 列,但已通过 IIS 回收解决
- jquery - 为什么我的用户输入字段在提交后不会重置?
- c++ - IntelMPI 错误(适用于 openMPI)