Как добывать многословные, учитывая их положение в тексте? - PullRequest
2 голосов
/ 25 мая 2020

Я хочу извлечь определенные слова, расположенные между годами и следующей запятой в данном тексте. Хотя термин Mining появляется перед и после 2020 в text, мне нужен более поздний, который находится между (2020) и ,. Та же концепция применяется к термину Computer Science в следующем text.

library(stringr)
text <- "This is text Mining exercise (2020) Mining, p. 628508; Computer Science text analysis (1998) Computer Science, p.345-355; Introduction to data mining (2015) J. Data Science, pp. 31-33"
comp <- c("Mining", "Computer Science", "J. Data Science")
pattern <- str_c(comp,collapse ="|")
data <- str_extract_all(text, pattern)

Последняя строка приведенного выше кода дает результат:

[1] "Mining" "Mining" "Computer Science" "Computer Science" "J. Data Science" 

Результат, который Я ищу:

[1] "Mining" "Computer Science" "J. Data Science" 

Примечание : положение этих слов имеет значение. Любая помощь приветствуется!

1 Ответ

2 голосов
/ 25 мая 2020

Если нам нужно выделить между ) после di git и ,, создайте поиск по регулярному выражению

library(stringr)
str_extract_all(text, str_c("(?<=\\(\\d{4}\\)\\s)(", pattern, ")(?=,)"))[[1]]
#[1] "Mining"           "Computer Science" "J. Data Science" 
...