我有一套陈述
statement <- as.matrix(c("the cat sat on the mat",
"the dog ran up the hill",
"the dog ran up the hill to the mat"))
以及关键字列表
keywords <- as.matrix(c("cat", "mat", "dog", "hill"))
我想在关键字列表中的语句中进行搜索,并标记出现的关键字,即结果
statement keywords
the cat sat on the mat cat, mat
the dog ran up the hill dog, hill
the dog ran up the hill to the mat dog, hill, mat
我想我能做到的一种方法是使用grep,比如
statement[grep("cat", statement$V1, ignore.case = TRUE), "keywords"] <- "cat"
statement[grep("mat", statement$V1, ignore.case = TRUE), "keywords"] <- "mat"
......等等,但首先,这不会给我标记所有出现的关键字。其次,如果我想找到一种方法,当我有一个大的列表,让我们说1000个关键字和500个语句时,它将是笨拙的。
你怎么建议这个呢?有没有办法使用grep,或者是否有任何软件包可以挖掘文本并从预定列表中返回关键字?
谢谢!
答案 0 :(得分:1)
您可以使用stringi
包,
library(stringi)
sapply(stri_extract_all_regex(statement[,1],
paste(keywords[,1], collapse = '|')), toString)
#[1] "cat, mat" "dog, hill" "dog, hill, mat"
答案 1 :(得分:0)
keywords <- c("cat", "mat", "dog", "hill")
m = sapply(keywords, grepl, statement)
cat mat dog hill
[1,] TRUE TRUE FALSE FALSE
[2,] FALSE FALSE TRUE TRUE
[3,] FALSE TRUE TRUE TRUE
apply(m,1, function(y) paste0(colnames(m)[y], collapse=","))
[1] "cat,mat" "dog,hill" "mat,dog,hill"
或单行:将statement
的每一行拆分为&#34; &#34;然后使用%in%
检查哪些字词和paste
全部
apply(statement, 1, function(i) paste0(x[x %in% unlist(strsplit(i, " "))], collapse=","))
[1] "cat,mat" "dog,hill" "mat,dog,hill"