Данные, которые у меня есть, представляют собой вектор с предложениями, разрезанными на части.
y <- c("G'day", "world and everybody", "else.", "How's life?", "Hope", "you're", "doing just", "fine.")
Я бы хотел снова сложить предложения.
Ожидаемый результат:
y
[1] "G'day world and everybody else."
[2] "How's life?"
[3] "Hope you're doing just fine."
«Правило» для предложения: он начинается с заглавной буквы. Основываясь на этом правиле, я до сих пор пробовал вот что (но результат не совсем удовлетворительный):
unlist(strsplit(paste0(y[which(grepl("^[A-Z]", y))], " ", y[which(grepl("^[a-z]", y))], collapse = ","), ","))
[1] "G'day world and everybody" "How's life? else." "Hope you're" "G'day doing just"
[5] "How's life? fine."
EDIT :
Пришли с этим решением, которое дает ожидаемый результат, но выглядит некрасиво:
y1 <- c(paste0(y[grepl("^[A-Z].*[^.?]$", y, perl = T)], " ", unlist(strsplit(paste0(y[which(grepl("^[a-z]", y))], collapse = " "), "\\."))), y[grepl("^[A-Z].*[.?]$", y, perl = T)])
y1
[1] "G'day world and everybody else" "Hope you're doing just fine" "How's life?"
Какое решение лучше?
EDIT 2 :
Также хорошее решение:
library(stringr)
str_extract_all(paste(y, collapse = " "), "[A-Z][^.?]*(\\.|\\?)")