搜索字符串的关键字
Keyword searching a character string
假设我有示例字符串
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
我想检查它是否有我正在寻找的名词和其他相关关键字。例如:
nouns <- c("i", "you", "we")
keywords <- c("cough", "tomorrow", "nasty")
该函数应该 return 函数 (sample1) 为 TRUE,函数 (sample2) 为 FALSE,因为 sample2 没有来自我指定向量的名词,即使它有关键字。
我熟悉 sjmisc 包中的 str_contains(),但不确定如何将其扩展到两个向量的组合。
您可以将 nouns
和 keywords
组合成一个模式并检查它们是否都出现在字符串中。
nouns <- c("i", "you", "we")
keywords <- c("cough", "tomorrow", "nasty")
check_keyword <- function(x) {
grepl(paste0('\b', nouns, '\b', collapse = '|'), x) &
grepl(paste0('\b', keywords, '\b', collapse = '|'), x)
}
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
check_keyword(sample1)
#[1] TRUE
check_keyword(sample2)
#[1] FALSE
您可以将关键字和示例都放入 list
中。对于前者,我们同时应用了一个已经准备好所需模式的函数 mkPat
。
mkPat <- function(x) do.call(paste, c(list(paste0("\b", x, "\b")), collapse="|"))
kw <- lapply(list(nouns, keywords), mkPat)
smp <- list(sample1, sample2, sample3)
那么我们就可以很方便的使用sapply
sapply(kw, grepl, smp)
# [,1] [,2]
# [1,] TRUE TRUE
# [2,] FALSE TRUE
# [3,] FALSE FALSE
并查看 rowSums
(共 TRUE
个)等于 2 的位置。
rowSums(sapply(kw, grepl, smp)) == 2
# [1] TRUE FALSE FALSE
数据:
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
sample3 <- "do yall like tasty burgers"
假设我有示例字符串
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
我想检查它是否有我正在寻找的名词和其他相关关键字。例如:
nouns <- c("i", "you", "we")
keywords <- c("cough", "tomorrow", "nasty")
该函数应该 return 函数 (sample1) 为 TRUE,函数 (sample2) 为 FALSE,因为 sample2 没有来自我指定向量的名词,即使它有关键字。
我熟悉 sjmisc 包中的 str_contains(),但不确定如何将其扩展到两个向量的组合。
您可以将 nouns
和 keywords
组合成一个模式并检查它们是否都出现在字符串中。
nouns <- c("i", "you", "we")
keywords <- c("cough", "tomorrow", "nasty")
check_keyword <- function(x) {
grepl(paste0('\b', nouns, '\b', collapse = '|'), x) &
grepl(paste0('\b', keywords, '\b', collapse = '|'), x)
}
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
check_keyword(sample1)
#[1] TRUE
check_keyword(sample2)
#[1] FALSE
您可以将关键字和示例都放入 list
中。对于前者,我们同时应用了一个已经准备好所需模式的函数 mkPat
。
mkPat <- function(x) do.call(paste, c(list(paste0("\b", x, "\b")), collapse="|"))
kw <- lapply(list(nouns, keywords), mkPat)
smp <- list(sample1, sample2, sample3)
那么我们就可以很方便的使用sapply
sapply(kw, grepl, smp)
# [,1] [,2]
# [1,] TRUE TRUE
# [2,] FALSE TRUE
# [3,] FALSE FALSE
并查看 rowSums
(共 TRUE
个)等于 2 的位置。
rowSums(sapply(kw, grepl, smp)) == 2
# [1] TRUE FALSE FALSE
数据:
sample1 <- "i have a nasty cough today"
sample2 <- "do yall like nasty burgers"
sample3 <- "do yall like tasty burgers"