使用 grep 在 lapply 中搜索特定的词根

Using grep to search for specific a root word within lapply

我在 R 中使用以下代码行来搜索其中包含“事件”一词的句子:

ind<-lapply(sents(tri_doc), function(ch) grep("event", ch))

我对词根“event”或“events”感兴趣,但是这个 grep returns 句子中“prevent”、“eventually”、“eventuality”等都出现了...搜索太宽泛了。

似乎 grep 在 lapply() 中的行为有点不同。

我尝试了 grep -w ("event", ch)),但这在 R 中返回了一个错误。我也尝试过使用转义字符 spaces " " 或 " \s" 以及posix space 搜索“事件”...但是这些并没有完成我需要的(实际上,它们不起作用或找不到任何东西。

如何使用 grep 只搜索词根而不搜索其较长的形式?谢谢

基于

vec <- c("event", "prevent", "events", "eventuality")

尝试:

  • word-boundary

    grep("\bevents?\b", vec, value = TRUE)
    # [1] "event"  "events"
    
  • 负面回顾(和 word-boundary):

    grep("(?<![A-Za-z])events?\b", vec, value = TRUE, perl = TRUE)
    # [1] "event"  "events"
    

(我这里用grep(.., value=TRUE)只是为了演示,value=与是否匹配无关,只是returns。)