r- grepl для поиска подходящих строк в любом порядке - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть подходящая строка.Необходимо найти текст, который соответствует нескольким строкам (обоим / всем) и любому порядку:

Text1 : "I have no intention to make illegal parking along the road or cause obstruction."

Text2 : "I have no intention to make illegal parking along the road or cause damage."

MyCode:

    mynames=c("illegal parking" , "obstruction")
grepl(paste(mynames, collapse='|'), Text1, ignore.case=TRUE)

Когда я передаю Text1 и Text2 - я получаю TRUE - для обоих;Однако мне нужно TRUE для Text1 и FALSE для Text2.Это должно происходить, когда присутствуют только обе строки - и это может быть в любом порядке в тексте.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вы можете проверить результаты str_extract_all(), чтобы увидеть, совпадают ли оба.Такой подход означает, что вам не нужно беспокоиться о заказе.

library(stringr)
library(purrr)

map_lgl(str_extract_all(c(Text1, Text2), paste(mynames, collapse='|')), ~all(mynames %in% .x))

[1] TRUE FALSE
1 голос
/ 26 сентября 2019

| в регулярном выражении означает «или».Вот почему это верно в обоих текстах.Вы должны проверить, сопровождается ли "illegal parking" (с чем-то промежуточным или без него) "obstruction", в регулярном выражении это "illegal parking.*obstruction", или если у вас есть наоборот, поэтому "illegal parking.*obstruction|obstruction.*illegal parking"

grepl("illegal parking.*obstruction|obstruction.*illegal parking", Text1, ignore.case=TRUE)
...