我正在尝试在相同句子的上下文中搜索一组单词。例如,我正在尝试查找单词 "not"
和 "sugar"
是否都存在于单句的上下文中
string = c(
"I do not like sugar. However, I like coffee.",
"I like sugar. But I do not like coffee.")
这两个文字都带有"not"
和"sugar"
字样,但只有第一个文字在相同的句子中同时包含"not"
和"sugar"
字样。在第二个文本中,"not"
和"sugar"
存在于不同的句子中。
我想为第一个文本返回TRUE
,为第二个文本返回FALSE
。
我试过了grepl("not\\ssugar", string)
答案 0 :(得分:2)
这是一种可能的方式,当然不是最有效的,也不是更容易阅读(!) 虽然好处,它甚至为您提供了正确的句子。 我已经隔离了要测试的单词集和代码,以便您能够测试任意数量的单词的共同出现。
string = c(
"I do not like sugar. However, I like coffee.",
"I like sugar. But I do not like coffee.")
checkwords=lapply(string,
FUN=function(str,words=c("sugar","not"))
{
sapply(strsplit(str,"\\.")[[1]],FUN=function(el){
any(all(sapply(words,
FUN=function(wd)grepl(wd,el))))
})
})
# yes this can be a one line instruction...
checkwords
[[1]]
I do not like sugar However, I like coffee
TRUE FALSE
[[2]]
I like sugar But I do not like coffee
FALSE FALSE
然后检查初始向量string
的每个元素是否存在至少一个TRUE:
sapply(checkwords, any)
[1] TRUE FALSE
答案 1 :(得分:2)
你的尝试非常接近.... [^\\.,!?:;]
允许除之类和糖之间的标点符号之外的任何字符。
string = c(
"I do not like sugar. However, I like coffee.",
"I like sugar. But I do not like coffee.",
"I do not like coffee. But I love sugar.")
grepl("not[^\\.,!?:;]*sugar", string)