Как я могу удалить все символы между двумя другими повторяющимися символами в строке, используя R? - PullRequest
0 голосов
/ 14 декабря 2018

Следующий код успешно возвращает мне нужный мне текст перед использованием gsub, чтобы помочь «очистить».

am1<-getURL("url.com")
ami1<-htmlTreeParse(am1, useInternalNodes = TRUE)
ami1.tree.parse<- unlist(xpathApply(ami1, path = '//td', fun = xmlValue))
ami1.txt<-NULL
  for (i in 2:(length(ami1.tree.parse)-1)) {
    ami1.txt<-paste(ami1.txt, as.character(ami1.tree.parse[i]), sep = ' ')
  }

Проблема

Я не могу удалить всевопросы в тексте интервью.Например, текст выглядит так:

[1] "Q. How well do you think things are going in your marriage?JOE SMITH: It's going quite alright.Q. Where do you see yourself in five years?JOE SMITH: I'll probably move to Los Angeles and get into acting.Q. Okay. How do you think your wife feels about your thinking?JOE SMITH: I think she'd respond positively."

А для форматирования:

"В. Как вы думаете, как хорошо обстоят дела в вашем браке? ДЖО СМИТ: Все идет хорошоQ. Где ты видишь себя через пять лет? ДЖО СМИТ: Я, вероятно, перееду в Лос-Анджелес и приступлю к актерскому мастерству. Q. Хорошо. Как ты думаешь, как твоя жена относится к твоему мышлению? ДЖО СМИТ: Я думаю, что онабуду отвечать положительно. "

Чтобы быть абсолютно ясным, мне нужно из текста выше:

[1] "It's going quite alright. I'll probably move to Los Angeles and get into acting. I think she'd respond positively."

" Все идет хорошо. Я, наверное,переехать в Лос-Анджелес и начать играть. Думаю, она ответит положительно. "

Я пытался:

 ami1.txt<-gsub("Q.[^?]+H:", "",ami1.txt)
 ami1.txt<-gsub("Q.[^?]+H: ", "",ami1.txt)
 ami1.txt<-gsub("Q.*H:", "",ami1.txt)

Это сводится к тому, что я не понимаю regex конечно, но я был бы очень признателен, если бы кто-то мог указать мне правильное направление.

Увы, я солгал, текст, видимо, немного сложнее. У меня естьдобавил более сложный элемент в конец вышеприведенного текста ниже.Некоторые «вопросы» (Q.) начинаются с предложения:

 str2<-"Q. How well do you think things are going in your marriage?JOE SMITH: It's going quite alright.Q. Where do you see yourself in five years?JOE SMITH: I'll probably move to Los Angeles and get into acting.Q. Okay. How do you think your wife feels about your thinking?JOE SMITH: I think she'd respond positively.Q. That's interesting. When would you consider speaking to her?JOE SMITH: Probably, tomorrow. Q. That sounds good. How do you feel now? Better than before?JOE SMITH: Yeah I'm feeling alright."

Q.Как ты думаешь, как хорошо обстоят дела в твоем браке? ДЖО СМИТ: Все идет хорошо.Где вы видите себя через пять лет? ДЖО СМИТ: Я, вероятно, перееду в Лос-Анджелес и займусь актерским мастерством.Хорошо.Как вы думаете, как ваша жена относится к вашему мышлению? ДЖО СМИТ: Я думаю, что она ответит положительно.Это интересно.Когда вы подумаете поговорить с ней? ДЖО СМИТ: Возможно, завтра.Q. Это звучит хорошо.Как ты себя сейчас чувствуешь?Лучше, чем раньше? ДЖО СМИТ: Да, я чувствую себя хорошо.

Задача остается прежней, и ответ Акруна приближает меня:

 trimws(gsub("Q[^?]+\\?|[A-Z ]+:", "", str2))
 print(str2)
 [1] "It's going quite alright. I'll probably move to Los Angeles and get into acting. I think she'd respond positively. Probably, tomorrow.  Better than before? Yeah I'm feeling alright."

[1] "Все идет хорошо.Я, вероятно, перееду в Лос-Анджелес и займусь актерским мастерством. Думаю, она ответит положительно. Возможно, завтра. Лучше, чем раньше? Да, я чувствую себя хорошо. "

Окончательное обновление

Ответ Акруна:

 trimws(gsub("Q[^?]+\\?|[A-Z ]+:", "", str2))

Я не совсем уверен, почему приведенный выше ответ не полностью удалял все, что находится между "Q" и последним знаком вопроса, но увы.После внесения изменений в мой вопрос выше, я решил, что на самом деле я искал все, от «Q» до «:», которое нужно удалить.Поэтому я использовал этот инструмент , чтобы помочь мне понять, что не так с моим пониманием регулярных выражений.Я получил следующее, чтобы стереть все символы между "Q" и ":".

 gsub("Q[^:]+\\?|[A-Z ]+:", "", str2)

1 Ответ

0 голосов
/ 14 декабря 2018

Мы можем сопоставить символы, начинающиеся с Q, за которыми следуют символы, которые не являются ? ([^?]), за которыми следует знак вопроса или (|) заглавные буквы, за которыми следует :, и заменить егос пробелами.Если есть начальные / запаздывающие пробелы, используйте trimws

trimws(gsub("Q[^?]+\\?|[A-Z ]+:", "", str1))
#[1] "It's going quite alright. I'll probably move to Los Angeles and get into acting. I think she'd respond positively."

data

str1 <- "Q. How well do you think things are going in your marriage?JOE SMITH: It's going quite alright.Q. Where do you see yourself in five years?JOE SMITH: I'll probably move to Los Angeles and get into acting.Q. Okay. How do you think your wife feels about your thinking?JOE SMITH: I think she'd respond positively."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...