Как мне свернуть указанный шаблон c в тексте? - PullRequest
1 голос
/ 08 апреля 2020

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

   [1]"I am a Mr."
   [2]"asking for help."
   [3]"Can you help?"
   [4]"Thank you ms."
   [5]"or mr."

Я хочу свернуть, когда строка заканчивается аббревиатурой, например, mr., Mrs. поэтому конечным результатом будет желаемый результат ниже.

    [1]"I am a Mr. asking for help."
    [2]"Can you help?"
    [3]"Thank you ms. or mr."

Я уже создал вектор (называемый abbr), содержащий все мои сокращения в следующем формате:

> abbr
[1] "Mr|Mrs|Ms|Dr|Ave|Blvd|Rd|Mt|Capt|Maj"

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

lines<-gsub('(?<=abbr\\.\\n)(?=[A-Z])', ' ', lines, perl=FALSE)

1 Ответ

1 голос
/ 08 апреля 2020

Мы можем использовать tapply для свертывания строки и grepl для создания групп для свертывания.

x <- c("I am a Mr.", "asking for help.","Can you help?","Thank you ms.", "or Mr.")
#Include all the abbreviations with proper cases
#Note that "." has a special meaning in regex so you need to escape it. 
abbr <- 'Mr\\.|Mrs\\.|Ms\\.|Dr\\.|mr\\.|ms\\.'

unname(tapply(x, c(0, head(cumsum(!grepl(abbr, x)), -1)), paste, collapse = " "))
#[1] "I am a Mr. asking for help." "Can you help?"  "Thank you ms. or mr."    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...