gpt4 book ai didi

正则表达式正在运行,但代码看起来很糟糕

转载 作者:行者123 更新时间:2023-12-04 13:36:05 26 4
gpt4 key购买 nike

我正在清理一长串名词短语以进行进一步的文本挖掘。它们应该是 1 或 2 个词的短语,但有些有 /在一个联合。这是我所拥有的:

library(tidyverse)
conjuncts <- tibble(usecase = 1:3,
classes = c("Insulators/Insulation",
"Optic/light fiber",
"Magnets"))

而且我要:
wanted <- tibble(usecase = c(1,1,2,2,3),
classes = c("Insulators/Insulation",
"Insulators/Insulation",
"Optic/light fiber",
"Optic/light fiber",
"Magnets"),
bigrams = c("Insulators", "Insulation",
"Optic fiber", "Light fiber", NA))

我有一些工作,但它是可怕的和不可扩展的。
patternSplit <- function(class){
regexs <- c("(?x) ^ (\\w+) / (\\w+) $",
"(?x) ^ (\\w+) / (\\w+) \\s+ (\\w+) $")
if(str_detect(class, regexs[1])){
extr <- str_match(class, regexs[1])
list(extr[1,2],
extr[1,3])
} else if(str_detect(class, regexs[2])){
extr <- str_match(class, regexs[2])
list(paste(extr[1,2], extr[1,4]),
paste(extr[1,3], extr[1,4]))
} else {
list(NA_character_)
}
}

anx <- conjuncts %>%
mutate(bigrams = map(classes, patternSplit)) %>%
unnest(cols = "bigrams") %>%
unnest(cols = "bigrams")

这给了我我想要的东西,但是 blecchh!
# A tibble: 5 x 3
usecase classes bigrams
<int> <chr> <chr>
1 1 Insulators/Insulation Insulators
2 1 Insulators/Insulation Insulation
3 2 Optic/light fiber Optic fiber
4 2 Optic/light fiber light fiber
5 3 Magnets NA

前两个问题 (1) 我必须运行 rexex 两次 - 一次是 str_detect获得 if / else 的逻辑再次使用 str_match拉出 token 。 (2) 我已经做了双 unnest展开列表结构。还有更小的问题(3)我能摆脱 if / else吗? , 进入 case_whenswitch ?

我最终会将其扩展到大约十几种模式和用例。

最佳答案

这是使用 / 的解决方案作为检测词组的分隔符,然后使用 ifelse 得到想要的结果:

patternSplit<- function(x,p="[A-z]+[/][A-z]+"){
x1<- stringr::str_extract(x,p)
x2<- stringr::str_replace(x,p,"")
return(cbind(val1=x1,val2=x2))
}

conjuncts<- cbind(conjuncts,conjuncts$classes %>% patternSplit()) %>%
tidyr::separate_rows(val1, sep = '/') %>%
dplyr::mutate(bigrams= ifelse(!is.na(val1),paste0(val1,val2),val1)) %>%
dplyr::select(-contains("val"))

conjuncts
usecase classes bigrams
1 1 Insulators/Insulation Insulators
2 1 Insulators/Insulation Insulation
3 2 Optic/light fiber Optic fiber
4 2 Optic/light fiber light fiber
5 3 Magnets <NA>

关于正则表达式正在运行,但代码看起来很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61980454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com