How to find if there is a word inside a text in R

3

I need to know if there is a specific word inside a certain text, for example fnord . So far I've only found:

x<-"fnord: Você não tem nivel de acesso a está informação."
strsplit(x, "[[:punct:] ]")
[[1]]
[1] "fnord"      ""           "Você"       "não"        "tem"        "nivel"      "de"        
[8] "acesso"     "a"          "está"       "informação"

I saw something about the grep function, but I could not understand it right.
And I would prefer a response of type TRUE or FALSE .

    
asked by anonymous 24.07.2018 / 21:42

1 answer

4

@ rui-barradas already gave the answer in the comments, this is just an elaboration. First, let's create an example with more sentences.

string.vector <- c(
  "gnoll: Você tem acesso total a esta informação.",
  "stack: Você tem acesso parcial a esta informação.",
  "fnord: Você não tem nivel de acesso a esta informação.",
  "fnord: Você poderia ter acesso a esta informação."
)

> string.vector
[1] "gnoll: Você tem acesso total a esta informação."       
[2] "stack: Você tem acesso parcial a esta informação."     
[3] "fnord: Você não tem nivel de acesso a esta informação."
[4] "fnord: Você poderia ter acesso a esta informação."     

grep will give you the indexes (positions) in which the pattern you fetched was found. grepl will give you TRUE / FAIL for all positions:

> grep('fnord', string.vector)
[1] 3 4

> grepl('fnord', string.vector)
[1] FALSE FALSE  TRUE  TRUE

strsplit generates a list with separate strings according to the criteria it has set (scores and spaces, if any):

split.list <- strsplit(string.vector, "[[:punct:] ]")

> split.list
[[1]]
[1] "gnoll"      ""           "Você"       "tem"        "acesso"    
[6] "total"      "a"          "esta"       "informação"

[[2]]
[1] "stack"      ""           "Você"       "tem"        "acesso"    
[6] "parcial"    "a"          "esta"       "informação"

[[3]]
[1] "fnord"      ""           "Você"       "não"        "tem"       
[6] "nivel"      "de"         "acesso"     "a"          "esta"      
[11] "informação"

[[4]]
[1] "fnord"      ""           "Você"       "poderia"    "ter"       
[6] "acesso"     "a"          "esta"       "informação"

Applying grep and grepl here will give you the same result because you are indicating which items in the list have the search key:

> grep('fnord', split.list)
[1] 3 4

> grepl('fnord', split.list)
[1] FALSE FALSE  TRUE  TRUE

You can use lapply to apply grep / grepl to every element in the list

> lapply(split.list, grep, pattern = 'fnord')
[[1]]
integer(0)

[[2]]
integer(0)

[[3]]
[1] 1

[[4]]
[1] 1

> lapply(split.list, grepl, pattern = 'fnord')
[[1]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

[[2]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

[[3]]
[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

[[4]]
[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

The stringr package has friendly functions for working with text strings. Check out their vignette on regular expressions .

    
25.07.2018 / 03:52