使用正则表达式清洁 sparklyr 中的字符串
Cleaning strings in sparklyr using regex
我正在尝试使用 regexp_replace 清理 sparklyr 中 table 中的字符串。我需要删除单词之间的多个空格和特定的整个单词。
建立Spark连接
pharms <- spark_read_parquet(sc, 'pharms', 's3/path/to/pharms', infer_schema = TRUE, memory = FALSE)
要清理的向量
我要清理的 df 向量看起来像这样,但它在 sparklyr 连接中的 table 内:
drug_strings <- c("tablomiacin sodium tab mg", "nsaid caps mg")
正则表达式处理数据后所需的输出将如下所示:
期望的结果
[1] "tablomiacin sodium", "nsaid"
尝试次数
我尝试了正则表达式中使用的各种组合,例如:
pharms_cln <- pharms %>%
distinct(drug_strings)%>%
mutate(new_strings=regexp_replace(drug_strings, "\b(caps|mg|tab)\b", ""))
pharms_cln <- pharms %>%
distinct(drug_strings)%>%
mutate(new_strings=regexp_replace(drug_strings, "\s+", ""))
但它们都只是替换所有字母或子字符串,而不仅仅是单个单词或打印与配置单元相关的错误。同样,我试图删除空格的努力似乎只是删除了字母 's'.
知道正则表达式的人当然可以简化这段代码,但下面使用 stringr 包中的 str_remove 函数。
drug_strings <- c("tablomiacin tab mg", "nsaid caps mg")
drug_strings <- data.frame(drug_strings)
drug_strings <- drug_strings %>%
mutate(new_strings=str_remove(drug_strings, "\b(caps|mg|tab)\b")) %>%
mutate(new_strings=str_remove(new_strings, "\s+")) %>%
mutate(new_strings = str_remove(new_strings, "mg"))
``
如果寻找替换的规则是“caps|mg|tab
之前的任何内容”,那么这可能有效:
数据:
drug_strings <- c("tablomiacin sodium tab mg", "nsaid caps mg")
解决方案:
trimws(gsub("\b(tab|mg|caps)\b", "", drug_strings))
[1] "tablomiacin sodium" "nsaid"
如果出于某种原因您需要使用 str_extract
,您可以这样做:
str_extract(gsub("\s{2,}", " ", drug_strings), "\b\w+\b(\s\b\w+\b)*(?=\s\b(tab|mg|caps)\b)")
这首先将所有多个白色 space 字符减少为一个这样的字符,然后进行提取。
我正在尝试使用 regexp_replace 清理 sparklyr 中 table 中的字符串。我需要删除单词之间的多个空格和特定的整个单词。
建立Spark连接
pharms <- spark_read_parquet(sc, 'pharms', 's3/path/to/pharms', infer_schema = TRUE, memory = FALSE)
要清理的向量
我要清理的 df 向量看起来像这样,但它在 sparklyr 连接中的 table 内:
drug_strings <- c("tablomiacin sodium tab mg", "nsaid caps mg")
正则表达式处理数据后所需的输出将如下所示:
期望的结果
[1] "tablomiacin sodium", "nsaid"
尝试次数
我尝试了正则表达式中使用的各种组合,例如:
pharms_cln <- pharms %>%
distinct(drug_strings)%>%
mutate(new_strings=regexp_replace(drug_strings, "\b(caps|mg|tab)\b", ""))
pharms_cln <- pharms %>%
distinct(drug_strings)%>%
mutate(new_strings=regexp_replace(drug_strings, "\s+", ""))
但它们都只是替换所有字母或子字符串,而不仅仅是单个单词或打印与配置单元相关的错误。同样,我试图删除空格的努力似乎只是删除了字母 's'.
知道正则表达式的人当然可以简化这段代码,但下面使用 stringr 包中的 str_remove 函数。
drug_strings <- c("tablomiacin tab mg", "nsaid caps mg")
drug_strings <- data.frame(drug_strings)
drug_strings <- drug_strings %>%
mutate(new_strings=str_remove(drug_strings, "\b(caps|mg|tab)\b")) %>%
mutate(new_strings=str_remove(new_strings, "\s+")) %>%
mutate(new_strings = str_remove(new_strings, "mg"))
``
如果寻找替换的规则是“caps|mg|tab
之前的任何内容”,那么这可能有效:
数据:
drug_strings <- c("tablomiacin sodium tab mg", "nsaid caps mg")
解决方案:
trimws(gsub("\b(tab|mg|caps)\b", "", drug_strings))
[1] "tablomiacin sodium" "nsaid"
如果出于某种原因您需要使用 str_extract
,您可以这样做:
str_extract(gsub("\s{2,}", " ", drug_strings), "\b\w+\b(\s\b\w+\b)*(?=\s\b(tab|mg|caps)\b)")
这首先将所有多个白色 space 字符减少为一个这样的字符,然后进行提取。