распознавание : уберите слова, вырезанные в конце строк, и сохраните абзацы

#r #dplyr #stringr

Вопрос:

У меня есть вектор строк. Каждый элемент вектора соответствует строке упорядоченного текста. Последнее слово каждой строки может быть вырезано (или нет) черточкой и продолжено на следующей строке, следующем элементе вектора.

 text <- c("Lorem ipsum dolor sit am-",
     "et consectetur adipis-",
     "cing Quisque euismod, ex vel -aliquam- vestibulum",
     "Nulla lacinia volutpat ipsum sed condimentum")
 

Что я хочу :
восстановить вырезанные слова, сохраняя при этом расположение текста в абзацах.

 Lorem ipsum dolor sit amet 
consectetur adipiscing
Quisque euismod, ex vel -aliquam- vestibulum
Nulla lacinia volutpat ipsum sed condimentum
 

Чего я не хочу :

 Lorem ipsum dolor sit amet consectetur adipiscing Quisque euismod, ex vel -aliquam- vestibulum Nulla lacinia volutpat ipsum sed condimentum 
 

Что я сделал :
Я преобразовал строки вектора в массив данных, потому что я думаю, что функции в пакете dplyr (опережение и отставание) могут быть мне полезны.

 textdf <- as.data.frame((text))


library(dplyr)
textdf  <- textdf %>%
rename( text = '(text)')
 

Что, по — моему, следует сделать:
Если строка заканчивается тире, выберите первое слово следующей строки, удалите тире, вырежьте и вставьте слово в конце строки.

 library(stringr)
 textdf  <- textdf %>%
 mutate(text = str_replace(text, "-$", lag("^. \s")))
 

Ответ №1:

Вот способ —

 library(dplyr)

data.frame(text) %>%
         #The word end with "-"
  mutate(cut_word = grepl('-


Комментарии:

1. Спасибо вам за вашу помощь.

, text),
#Remove the last "-"
text = sub('-

Комментарии:

1. Спасибо вам за вашу помощь.

, '', text),
#If cut_word get 1st word from next value and paste it in current value.
text = ifelse(cut_word, paste0(text, stringr::word(lead(text), 1)), text),
#Remove the first word if previous value has cut_word.
text = ifelse(lag(cut_word, default = FALSE), sub('.*?\s', '', text), text)) %>%
select(-cut_word)

# text
#1 Lorem ipsum dolor sit amet
#2 consectetur adipiscing
#3 Quisque euismod, ex vel -aliquam- vestibulum
#4 Nulla lacinia volutpat ipsum sed condimentum

Комментарии:

1. Спасибо вам за вашу помощь.