Я хочу извлечь биграммы из предложений, используя регулярное выражение, описанное здесь , и сохранить вывод в новом столбце, который ссылается на оригинал.
![enter image description here](https://i.stack.imgur.com/OdSyE.png)
library(dplyr)
library(stringr)
library(splitstackshape)
df <- data.frame(a =c("apple orange plum"))
# Single Words - Successful
df %>%
# Base R
mutate(b = sapply(regmatches(a,gregexpr("\\w+\\b", a, perl = TRUE)),
paste, collapse=";")) %>%
# Duplicate with Stringr
mutate(c = sapply(str_extract_all(a,"\\w+\\b"),paste, collapse=";")) %>%
cSplit(., c(2,3), sep = ";", direction = "long")
Первоначально я думал, что проблема, похоже, связана с движком регулярных выражений, но ни stringr::str_extract_all
(ICU), ни base::regmatches
(PCRE) не работают.
# Bigrams - Fails
df %>%
# Base R
mutate(b = sapply(regmatches(a,gregexpr("(?=(\\b\\w+\\s+\\w+))", a, perl = TRUE)),
paste, collapse=";")) %>%
# Duplicate with Stringr
mutate(c = sapply(str_extract_all(a,"(?=(\\b\\w+\\s+\\w+))"),paste, collapse=";")) %>%
cSplit(., c(2,3), sep = ";", direction = "long")
В результате, я предполагаю, что проблема, вероятно, связана с использованием оглядки нулевой ширины вокруг группы захвата. Есть ли в R действительное регулярное выражение, которое позволяет извлекать эти биграммы?