2017-02-08 83 views
2

我正在嘗試搜索相同句子的上下文中的一組單詞。例如,我想找到的話"not""sugar"是否都在單個句子的上下文存在搜索同一句子中的一組單詞R

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)

回答

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) 
+0

謝謝你的回答! – gibbz00

2

這是一個可行的辦法,肯定不是最有效的,也不是讀(!),雖然 好處,它甚至提供你是真實的句子(S)更容易。 我已經隔離了一組要測試的單詞和代碼,以便您能夠測試任意數量的單詞的共同出現。

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的每一個元素:

sapply(checkwords, any) 
[1] TRUE FALSE 
+0

謝謝你的回答! – gibbz00

相關問題